33

我正在通过 Qt 的 KeyPress 函数模拟对应用程序的 keyPresses。所有 KeyPresses 工作正常。但是,当我传递一个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?
4

2 回答 2

68

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

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

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

QPushButton* button = pWin->findChild<QPushButton*>("Button name");
于 2010-11-30T08:14:43.467 回答
2

您可能希望在您的小部件上放置一个自定义事件过滤器以捕获关键事件并查看它到底发生了什么。

于 2010-11-30T08:16:40.693 回答