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