Вопрос

Я использую 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.

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top