Использование QMDIArea с Qt 4.4. - PullRequest
1 голос
/ 24 ноября 2008

Я использую QMdiArea в Qt 4.4.

Если создается новый проект, я добавляю несколько подокон к QMdiArea. Я хотел бы запретить пользователю закрывать подокно во время выполнения. Подокна следует закрывать, только если закрыто все приложение или создан новый проект.

Как я могу это сделать?

Ответы [ 2 ]

3 голосов
/ 21 декабря 2010

Вам нужно определить свой собственный 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.

1 голос
/ 25 февраля 2009

Вы бы сделали это так же, как для окна верхнего уровня: обработайте и проигнорируйте отправленное им QCloseEvent. QMdiArea :: closeActiveSubWindow / QMdiArea :: closeAllSubWindows просто вызывает QWidget :: close, который отправляет closeEvent и подтверждает, что он был принят, прежде чем продолжить.

Вы можете обработать это событие, создав подкласс QMdiSubWindow и переопределив QWidget :: closeEvent, или используя фильтр событий для его перехвата.

...