我正在使用Qt 4.4中的QMdiArea
。
如果创建一个新项目,我会向 QMdiArea
添加一定数量的子窗口。 我希望在运行时禁止用户关闭子窗口。 只有当整个应用程序关闭或创建新项目时,子窗口才应关闭。
我该怎么做?
我正在使用Qt 4.4中的QMdiArea
。
如果创建一个新项目,我会向 QMdiArea
添加一定数量的子窗口。 我希望在运行时禁止用户关闭子窗口。 只有当整个应用程序关闭或创建新项目时,子窗口才应关闭。
我该怎么做?
你需要定义自己的 subWindow
。创建一个 QMdiSubWindow
的子类并覆盖 closeEvent(QCloseEvent *closeEvent)
。你可以通过参数进行控制。例如:
void ChildWindow::closeEvent(QCloseEvent *closeEvent)
{
if(/*condition C*/)
closeEvent->accept();
else
closeEvent->ignore(); // you can do something else, like
// writing a string in status bar ...
}
然后,子类化
class MainWindowArea : public QMdiArea
{
Q_OBJECT
public:
explicit MainWindowArea(QWidget *parent = 0);
signals:
void closeAllSubWindows();
public slots:
};
// Implementation:
MainWindowArea::closeAllSubWindows()
{
// set close condition (new project is creating, C = true)
foreach(QMdiSubWindow* sub,this->subWindowList())
{
(qobject_cast<ChildWindow*>(sub))->close();
}
}
你可能还需要重写你的 MDI 区域中的 close 插槽。
您可以像顶层窗口一样处理并忽略发送的QCloseEvent来完成此操作。QMdiArea::closeActiveSubWindow/QMdiArea::closeAllSubWindows只会调用QWidget::close,它会发送closeEvent并在继续之前确认其被接受。
您可以通过继承 QMdiSubWindow 类并重新实现 QWidget::closeEvent 方法,或者使用事件过滤器拦截该事件来处理它。