【问题标题】:How do you get a widget's children in Qt?你如何在 Qt 中获得一个小部件的孩子?
【发布时间】:2011-05-17 17:11:43
【问题描述】:

我正在通过 Qt 的 KeyPress 函数模拟应用程序的 keyPresses。所有 KeyPresses 工作正常。但是,当我传递一个应该按下当前活动窗口的 OK 按钮的 QT::Key_Enter 或按下取消按钮的 QT::Key_Cancel 时,它什么也不做。

我在想也许,因为这些按钮没有焦点,而父窗口本身有焦点。你如何得到一个窗口的孩子?还是找到它上面的 OK 或 Cancel 按钮,这样您就可以将其设置为 activeWindow,然后成功传递 KeyPresses?

我有:

QWidget *pWin = QApplication::activeWindow;
QObjectList *pList = pWin->children();
//how do you iterate through the list and find the OK or Cancel button?

【问题讨论】:

    标签: c++ qt widget keypress qtestlib


    【解决方案1】:

    您可以使用 findChild() 函数和对象名称来获取特定的子对象。

    您还可以使用findChildren() 获取所有具有相同名称的孩子,然后使用foreach()QListIterator 遍历列表。

    要获得按钮,您可以尝试:

    QPushButton* button = pWin->findChild<QPushButton*>("Button name");
    

    【讨论】:

    • 如何使用 QListIterator?
    • 是的,我读过。但我认为当你得到一个 QWidget 的孩子列表时会有所不同......
    • 为什么?所有班级都一样。您只需将自己的代码放入 while 循环中
    • 1.如果没有活动窗口,pWin 可以为 NULL。 2. 如果您的列表是 QList 您的迭代器必须是 QListIterator
    【解决方案2】:

    您可能希望在您的小部件上放置一个自定义event filter 以捕获关键事件并查看它的实际情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 2018-04-28
      • 2011-01-28
      相关资源
      最近更新 更多