2011-03-04 13 views
5

que tienen¿Cómo forzar a QWidget a mostrarse en una ventana separada?

class MyWidget : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit MyWidget (QWidget *parent); 
    // ... 
}; 

// here is ALL the code in MyWidget constructor 
MyWidget::MyWidget(QWidget *parent) 
    : QWidget(parent) 
{ 
    glWidget = new GLWidget(this, cluster); 

    QHBoxLayout *mainLayout = new QHBoxLayout; 
    mainLayout->addWidget(glWidget); 
    setLayout(mainLayout); 

    setWindowTitle("Visualization"); 
} 

y la ventana principal MainWindow w;.

Quiero

  1. para crear nuevas instancias de MyWidget de w;
  2. que las instancias se destruirán después de QCloseEvent o con w (ahora se destruyen solo después de QCloseEvent);
  3. que las instancias aparezcan en ventanas nuevas.

estoy creando nueva instancia de MyWidget así:

void MainWindow::visualize() 
{ 
    MyWidget *widg = new MyWidget(this); // or widg = new MyWidget(0) 
    widg->show(); 
    widg->raise(); 
    widg->activateWindow(); 
} 

Cuando intento crear widg con w como parent, widg aparece dentro de la w (en la esquina superior izquierda).

¿Cuál es la forma más fácil y más clara de corregir eso?

Gracias!

Respuesta

10
MyWidget::MyWidget(QWidget *parent) 
    : QWidget(parent, Qt::Window) 
{ 
    glWidget = new GLWidget(this, cluster); 

    QHBoxLayout *mainLayout = new QHBoxLayout; 
    mainLayout->addWidget(glWidget); 
    setLayout(mainLayout); 

    setWindowTitle("Visualization"); 
} 

Adición de Qt::Window al constructor de QWidget debe hacer lo que quiera.

+1

¡Gracias por la solución! :) –

2

Como está escrito en QWidget's constructor reference para que un widget se convierta en una ventana, su padre debe ser 0. Pero cuando el padre es 0 mens para el padre es "TÚ" :) - es decir, tienes que cuidarlos - mantenlos a algún lugar accesible y destruirlos cuando sea el momento apropiado (ya sea en evento cercano, destructor o usando punteros compartidos).

+0

¿Qué pasa con Qt :: Window as WindowFlags? Eso no requiere que corras sin un padre. – aukaost

+0

@ algo: tienes razón, me olvidé de las banderas. Gracias por el recuerdo. – zkunov

Cuestiones relacionadas