我正在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插槽。

10-07 13:01