在小部件上单击“这是什么”按钮时如何获得通知?

彼得罗

当我按下[?]“这是什么?” 标题栏中的按钮,我应该检查哪个信号?

   Qt::WindowFlags flags;

   flags |= Qt::CustomizeWindowHint;    // Remove all previous windows hints

   // Restore previous hints
   flags |= Qt::Window;
   flags |= Qt::WindowTitleHint;
   flags |= Qt::WindowSystemMenuHint;
   //flags |= Qt::WindowMinimizeButtonHint;    // Hides [?]
   //flags |= Qt::WindowMaximizeButtonHint;    // Hides [?]
   flags |= Qt::WindowCloseButtonHint;

   // Add new hints
   flags |= Qt::WindowContextHelpButtonHint;

   setWindowFlags(flags);

   connect(this, ???, this, MainWindow::TestSlot());
库巴没有忘记莫妮卡

当按下 [?] 按钮时,我需要 [...] 调用一个函数(例如写入日志消息)。

当进入和离开 What's This 模式时,顶级窗口分别接收QEvent::EnterWhatsThisModeQEvent::LeaveWhatsThisMode事件。

当小部件接收到事件时,您可以将事件转换为信号,例如使用安装在该小部件上事件信号器。

或者,如果您想自动捕获所有窗口上的事件,而无需在每个顶级小部件上安装信号器,您可以在QApplication对象本身上安装信号器

下面是一个完整的例子:

// https://github.com/KubaO/stackoverflown/tree/master/questions/whatsthis-bypass-44073556
#include <QtWidgets>

// See https://stackoverflow.com/a/32027028/1329652
class WhatsThisSignaler : public QObject {
   Q_OBJECT
   bool eventFilter(QObject * obj, QEvent * ev) override {
      if (!obj->isWidgetType())
         return false;
      auto widget = static_cast<QWidget*>(obj);
      if (!widget->isWindow())
         return false;
      switch (ev->type()) {
      case QEvent::EnterWhatsThisMode:
      case QEvent::LeaveWhatsThisMode:
         emit whatsThisEvent(widget, ev);
         break;
      default:
         break;
      }
      return false;
   }
public:
   Q_SIGNAL void whatsThisEvent(QWidget *, QEvent *);
   WhatsThisSignaler(QObject * parent = {}) : QObject(parent) {}
   void installOn(QWidget * widget) {
      widget->installEventFilter(this);
   }
   void installOn(QCoreApplication * app) {
      app->installEventFilter(this);
   }
};

// See https://stackoverflow.com/q/22535469/1329652
template<typename EnumType> QString toName(EnumType enumValue)
{
    auto * enumName = qt_getEnumName(enumValue);
    auto * metaObject = qt_getEnumMetaObject(enumValue);
    QString name;
    if (metaObject) {
        auto enumIndex = metaObject->indexOfEnumerator(enumName);
        name = metaObject->enumerator(enumIndex).valueToKey(enumValue);
    }
    if (name.isEmpty())
       name = QString::number((int)enumValue);
    return name;
}

int main(int argc, char ** argv) {
   QApplication app{argc, argv};
   WhatsThisSignaler sig;
   QPlainTextEdit w;
   w.setWindowFlags(Qt::WindowContextHelpButtonHint | Qt::WindowCloseButtonHint);
   w.setMinimumSize(200, 200);
   w.setReadOnly(true);
   w.show();
   sig.installOn(&w);
   QObject::connect(&sig, &WhatsThisSignaler::whatsThisEvent, &w, [&w](QWidget*widget, QEvent*ev){
      w.appendPlainText(QStringLiteral("%1(0x%2) \"%3\" QEvent::%4")
                        .arg(widget->metaObject()->className())
                        .arg((uintptr_t)widget, 0, 16)
                        .arg(widget->objectName())
                        .arg(toName(ev->type())));
   });
   return app.exec();
}

#include "main.moc"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用“?” (这是什么小部件)在PyQT对话框的标题栏上

来自分类Dev

这是什么GTK小部件?

来自分类Dev

单击小部件上的按钮时更改布局

来自分类Dev

我如何在单击按钮的确切时刻获得小部件的值FLTK

来自分类Dev

如何获得有关小部件上每个光标移动的通知?

来自分类Dev

如何在小部件中的按钮单击上更新我的TextView?

来自分类Dev

仅当我单击“编辑”按钮时,如何使自定义窗口小部件可编辑?

来自分类Dev

如何在单击小部件中的按钮时显示烤面包并打开蓝牙?

来自分类Dev

单击按钮时删除重点条目小部件

来自分类Dev

如何访问窗口小部件或刚刚单击的按钮的文本?

来自分类Dev

如何单击小部件中的按钮来关闭覆盖图?

来自分类Dev

单击按钮刷新后如何刷新小部件列表视图?

来自分类Dev

单击窗口小部件时如何启动活动?

来自分类Dev

wordpress小部件的用途是什么?以及如何创建一个新的小部件?

来自分类Dev

如何交换QInputDialog小部件上的“取消”和“确定”按钮?

来自分类Dev

如何将图像设置为小部件上的按钮?

来自分类Dev

如何将图像设置为小部件上的按钮?

来自分类Dev

单击该按钮时如何获得?

来自分类Dev

单击按钮时如何获得输入值

来自分类Dev

单击TextField小部件时重新构建Flutter小部件

来自分类Dev

添加这是什么按钮

来自分类Dev

将小部件放在主屏幕上时如何分配小部件的设置

来自分类Dev

如何通过单击小部件按钮将所有小部件值设置为默认值?

来自分类Dev

在站点上单击按钮时,打开另存为对话框的正确方法是什么?

来自分类Dev

单击android小部件上的侦听器按钮不起作用

来自分类Dev

单击外部小部件时保留选择

来自分类Dev

自定义dojo小部件在单击按钮时不会清除文本字段

来自分类Dev

在matplotlib小部件中单击按钮时提取/打印滑块值(Python 2.7)

来自分类Dev

单击按钮时如何在js中获得活动按钮

Related 相关文章

  1. 1

    如何使用“?” (这是什么小部件)在PyQT对话框的标题栏上

  2. 2

    这是什么GTK小部件?

  3. 3

    单击小部件上的按钮时更改布局

  4. 4

    我如何在单击按钮的确切时刻获得小部件的值FLTK

  5. 5

    如何获得有关小部件上每个光标移动的通知?

  6. 6

    如何在小部件中的按钮单击上更新我的TextView?

  7. 7

    仅当我单击“编辑”按钮时,如何使自定义窗口小部件可编辑?

  8. 8

    如何在单击小部件中的按钮时显示烤面包并打开蓝牙?

  9. 9

    单击按钮时删除重点条目小部件

  10. 10

    如何访问窗口小部件或刚刚单击的按钮的文本?

  11. 11

    如何单击小部件中的按钮来关闭覆盖图?

  12. 12

    单击按钮刷新后如何刷新小部件列表视图?

  13. 13

    单击窗口小部件时如何启动活动?

  14. 14

    wordpress小部件的用途是什么?以及如何创建一个新的小部件?

  15. 15

    如何交换QInputDialog小部件上的“取消”和“确定”按钮?

  16. 16

    如何将图像设置为小部件上的按钮?

  17. 17

    如何将图像设置为小部件上的按钮?

  18. 18

    单击该按钮时如何获得?

  19. 19

    单击按钮时如何获得输入值

  20. 20

    单击TextField小部件时重新构建Flutter小部件

  21. 21

    添加这是什么按钮

  22. 22

    将小部件放在主屏幕上时如何分配小部件的设置

  23. 23

    如何通过单击小部件按钮将所有小部件值设置为默认值?

  24. 24

    在站点上单击按钮时,打开另存为对话框的正确方法是什么?

  25. 25

    单击android小部件上的侦听器按钮不起作用

  26. 26

    单击外部小部件时保留选择

  27. 27

    自定义dojo小部件在单击按钮时不会清除文本字段

  28. 28

    在matplotlib小部件中单击按钮时提取/打印滑块值(Python 2.7)

  29. 29

    单击按钮时如何在js中获得活动按钮

热门标签

归档