2011-03-04 73 views
5

如何強制QWidget顯示在單獨的窗口中?

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

和主窗口MainWindow w;

我想

  1. w創建進myWidget的新實例;
  2. QCloseEventw(現在它們僅在QCloseEvent之後才銷燬)後銷燬的實例;
  3. 該實例將出現在新窗口中。

我創造的MyWidget新實例是這樣的:

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

當我嘗試創建widgwparentwidg出現w內(在左上角)。

什麼是最簡單和最明確的方法來解決這個問題?

謝謝!

回答

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

添加Qt::WindowQWidget構造函數應該做你想要什麼。

+1

謝謝你的解決方案! :) – 2011-03-06 16:08:29

2

因爲它寫在一個窗口小部件成爲一個窗口它的父母應該是0但是當父母是0它的男人父母是「你」:) - 即你必須照顧他們 - 讓他們到某些可到達的地方,並在適當的時候銷燬它們(關閉事件,析構函數或使用共享指針)。

+0

Qt :: Window作爲WindowFlags怎麼樣?這並不要求您在沒有父母的情況下運行。 – aukaost 2011-03-06 15:02:06

+0

@something:你是對的,我忘記了旗幟。感謝召回。 – zkunov 2011-03-06 15:44:22

相關問題