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

时间:2011-03-04 04:36:20

标签: qt4 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;
  2. 创建MyWidget的新实例
  3. 要在QCloseEventw之后销毁的实例(现在它们仅在QCloseEvent之后销毁);
  4. 要在新窗口中显示的实例。
  5. 我正在创建MyWidget的新实例:

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

    当我尝试使用widg作为w创建parent时,widg会出现在w内(左上角)。

    解决这个问题的最简单,最明确的方法是什么?

    谢谢!

2 个答案:

答案 0 :(得分:11)

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::Window添加到QWidget的构造函数中应该可以执行您想要的操作。

答案 1 :(得分:2)

因为在QWidget's constructor reference中写入一个小部件成为一个窗口,它的父级应该为0.但是当父级为0时,父级是“你”:) - 即你必须照顾它们 - 将它们保存到某个可到达的位置并在适当的时候销毁它们(在关闭事件,析构函数或使用共享指针时)。