2011-03-04 46 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

相关问题