Pregunta

Estoy usando el QMdiArea en Qt 4.4.

Si se crea un nuevo proyecto, agrego varias subventanas a un QMdiArea . Me gustaría no permitir que el usuario cierre una ventana secundaria durante el tiempo de ejecución. Las subventanas solo deben cerrarse si se cierra toda la aplicación o si se crea un nuevo proyecto.

¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Necesita definir su propia subWindow . cree una subclase de QMdiSubWindow y anule el closeEvent (QCloseEvent * closeEvent) . Puedes controlarlo con argumentos. por ejemplo:

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 ...
}

luego subclase QMdiArea y anule QMdiArea :: closeAllSubWindows () de esta manera:

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();
    }
} 

también es posible que deba anular la ranura close de su área mdi.

Otros consejos

Harías lo mismo que para una ventana de nivel superior: procesa e ignora el QCloseEvent que envió. QMdiArea :: closeActiveSubWindow / QMdiArea :: closeAllSubWindows solo llame a QWidget :: close, que envía un closeEvent y confirma que fue aceptado antes de continuar.

Puede procesar este evento subclasificando QMdiSubWindow y reimplementando QWidget :: closeEvent, o usando un filtro de eventos para interceptarlo ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top