我有一个在 QT 设计器中创建的 ui 文件,我用它在运行时使用QUiLoader
该类创建一个对话框。对话框关闭时是否可以查询此对话框中所有小部件的状态?我可以从根小部件遍历小部件层次结构,但我不知道如何在对话框关闭时触发此遍历。
问问题
82 次
1 回答
1
解决方案可能是为QWidget
从QUiLoader
. 在该eventFilter
方法中,您可以捕获隐藏事件(由接受或拒绝插槽的对话框触发)。例如,头文件如下所示:
我的应用程序对象.h
#include <QObject>
class MyApplicationObject : public QObject
{
Q_OBJECT
public:
explicit MyApplicationObject(QObject *parent = 0);
~MyApplicationObject() {}
bool eventFilter(QObject *object, QEvent *event);
private:
QWidget *m_dialog;
};
这里是实现文件:
我的应用程序对象.h
#include <QFile>
#include <QtUiTools/QUiLoader>
#include "MyApplicationObject.h"
MyApplicationObject::MyApplicationObject(QObject *parent) :
QObject(parent)
{
QUiLoader loader;
QFile file(":/dialogs/dialog1");
file.open(QFile::ReadOnly);
m_dialog = loader.load(&file);
m_dialog->installEventFilter(this);
file.close();
m_dialog->show();
}
bool MyApplicationObject::eventFilter(QObject *object, QEvent *event)
{
if (object == m_dialog) {
if (event->type() == QEvent::Hide) {
qDebug("Do something with dialog widget if dialog was accepted or rejected");
return true;
} else {
return false;
}
} else {
// Call base implementation
return QMainWindow::eventFilter(object, event);
}
}
于 2013-06-21T07:11:27.847 回答