English 中文(简体)
使用Qt 4.4与QMDIArea。
原标题:
  • 时间:2008-11-24 19:59:32
  •  标签:

我正在使用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 方法,或者使用事件过滤器拦截该事件来处理它。





相关问题
热门标签