在Qt 4.4中使用QMDIArea。
我正在使用Qt 4.4中的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 ...
}
然后子类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();
}
}
您可能还需要重写你的MDI面积close
插槽。
是的,这是一个可能性。它不会删除右上角的“x”,但它的工作原理正确。其实我正在寻找一个解决方案,虽然也删除了这个“x”。 – nutario 2010-12-30 09:59:05
你会这样做的顶级窗口相同:处理并忽略它发送的QCloseEvent。 QMdiArea :: closeActiveSubWindow/QMdiArea :: closeAllSubWindows只需调用QWidget :: close,它会在继续之前发送一个closeEvent并确认它已被接受。
可以,或者通过使用事件过滤器拦截它处理通过继承QMdiSubWindow和重新实现了QWidget ::这的closeEvent事件..
你可以子类QMdiArea和重写默认closeActiveSubWindow/closeAllSubWindows方法不会关闭窗口时,用户请求它? – Tuminoid 2008-12-04 08:52:04