我正在使用QMdiArea
Qt 4.4 中的。
如果创建了一个新项目,我会在一个QMdiArea
. 我想禁止用户在运行时关闭子窗口。只有关闭整个应用程序或创建新项目时,才应关闭子窗口。
我怎样才能做到这一点?
我正在使用QMdiArea
Qt 4.4 中的。
如果创建了一个新项目,我会在一个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 ...
}
然后像这样子类化QMdiArea
并覆盖QMdiArea::closeAllSubWindows ()
:
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();
}
}
您可能还需要覆盖close
您的 mdi 区域的插槽。
您将执行与顶级窗口相同的操作:处理并忽略它发送的 QCloseEvent。QMdiArea::closeActiveSubWindow/QMdiArea::closeAllSubWindows 只需调用 QWidget::close,它会发送一个 closeEvent 并在继续之前确认它已被接受。
您可以通过继承 QMdiSubWindow 并重新实现 QWidget::closeEvent 来处理此事件,或者使用事件过滤器来拦截它。