Pregunta

Entonces los noQMdiArea versión de mi código,

MyWidget::MyWidget(QWidget* parent)
{
   ...
   layout()->setSizeConstraint( QLayout::SetFixedSize );
}

MainWindow::MainWindow(...)
{
   ...
   MyWidget* wgt = new MyWidget(NULL);
   wgt->show();
}

Funciona bien y produce un widget que el usuario no puede cambiar el tamaño. Pero cuando el MainWindow El código se reemplaza con

MainWindow::MainWindow(...)
{
   ...
   MyWidget* wgt = new MyWidget(ui->mdiArea); //Or MyWidget(NULL), same result
   ui->mdiArea->addSubWindow(wgt);
}

la ventana, ahora dentro del QMdiArea, es reevilable. No parece ser un problema de Qt :: WindowFlags, no manejan la política de cambio de tamaño. ¿Seguramente hay una manera de hacer esto? Nb no puedo usar algo como setFixedSize(ht, wd) Dado que el tamaño del widget puede cambiar programáticamente (se agregan y eliminan los subwidgets). Pero el usuario no debería poder cambiarlo.

¿Fue útil?

Solución

Lo siguiente funcionó para mí:

    MyWidget* wgt = new MyWidget(ui->mdiArea); 
    QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt); 
    subWindow->setFixedSize(wgt->size());
    wgt->show();

Otros consejos

A pesar de MyWidget no es restablecible cuando llamas:

ui->mdiArea->addSubWindow(wgt);

El widget se pone en un QMdiSubWindow cual es Responible. Todo lo que tiene que hacer es obtener la ventana que se crea y arreglar su tamaño:

QMdiSubWindow* subWindow = ui->mdiArea->addSubWindow(wgt);
subWindow->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);

Esto debería funcionar, pero no he probado este código yo mismo.

Editar: bueno ... aparentemente eso no Arregle el tamaño. :(

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