Qt4 如何强制QWidget在单独的窗口中显示?

Qt4 如何强制QWidget在单独的窗口中显示?,qt4,qwidget,Qt4,Qwidget,我有 主窗口主窗口w 我想要 从w创建MyWidget的新实例 要在QCloseEvent之后或使用w销毁的实例(现在它们仅在QCloseEvent之后销毁) 使实例显示在新窗口中 我正在创建MyWidget的新实例,如下所示: class MyWidget : public QWidget { Q_OBJECT public: explicit MyWidget (QWidget *parent); // ... }; // here is ALL the code

我有

主窗口<代码>主窗口w

我想要

  • w
    创建MyWidget的新实例
  • 要在
    QCloseEvent
    之后或使用
    w
    销毁的实例(现在它们仅在
    QCloseEvent
    之后销毁)
  • 使实例显示在新窗口中
  • 我正在创建
    MyWidget
    的新实例,如下所示:

    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");
    }
    
    当我尝试使用
    w
    作为
    父项创建
    widg
    时,
    widg
    出现在
    w
    的内部(在左上角)

    最简单、最清晰的解决方法是什么

    谢谢

    当写入窗口小部件以使其成为窗口时,其父窗口应为0。但是,当父对象为0时,父对象为“你”:(即,你必须照顾它们)将它们放在某个可到达的地方,并在适当的时间(在关闭事件、析构函数或使用共享指针时)销毁它们


    添加到的构造函数应该做您想做的事情。

    Qt::Window作为WindowFlags怎么样?这并不要求你在没有家长的情况下跑步。@something:你说得对,我忘了标志。谢谢你的召回。
    void MainWindow::visualize()
    {
        MyWidget *widg = new MyWidget(this); // or widg = new MyWidget(0)
        widg->show();
        widg->raise();
        widg->activateWindow();
    }
    
    MyWidget::MyWidget(QWidget *parent)
        : QWidget(parent, Qt::Window)
    {
        glWidget = new GLWidget(this, cluster);
    
        QHBoxLayout *mainLayout = new QHBoxLayout;
        mainLayout->addWidget(glWidget);
        setLayout(mainLayout);
    
        setWindowTitle("Visualization");
    }