0

我有一个在 QT 设计器中创建的 ui 文件,我用它在运行时使用QUiLoader该类创建一个对话框。对话框关闭时是否可以查询此对话框中所有小部件的状态?我可以从根小部件遍历小部件层次结构,但我不知道如何在对话框关闭时触发此遍历。

4

1 回答 1

1

解决方案可能是为QWidgetQUiLoader. 在该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 回答