1

QMdiAreaQt 4.4で使用しています。

新しいプロジェクトが作成された場合は、いくつかのサブ ウィンドウを に追加しQMdiAreaます。実行時にユーザーがサブ ウィンドウを閉じることを禁止したいと思います。サブウィンドウは、アプリケーション全体を閉じるか、新しいプロジェクトを作成する場合にのみ閉じてください。

これどうやってするの?

4

2 に答える 2

3

独自の を定義する必要があります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 領域のスロットをオーバーライドする必要がある場合もあります。

于 2010-12-21T10:52:29.097 に答える