你如何在Qt中获得小部件的孩子?

时间:2010-11-30 07:11:19

标签: c++ qt widget keypress qtestlib

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

2 个答案:

答案 0 :(得分:51)

您可以将findChild函数与对象名称一起使用以获取特定子项。 您也可以findChildren使用foreachQListIterator来获取具有相同名称和迭代列表的所有子项。

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

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

答案 1 :(得分:2)

您可能希望在窗口小部件上放置一个自定义event filter来捕获关键事件,并查看它实际发生了什么。