Qt QFrame成为单独的窗口

时间:2013-05-31 13:18:41

标签: c++ qt

我正在以编程方式在QT中构建​​UI。问题是当创建Qframe,设置布局并将布局添加到我的主窗口时,框架将成为它自己的窗口。我一直在四处寻找,但我似乎无法让它成为我主窗口中的一个框架。

    MainWindow::MainWindow()
    {

        QWidget::showMaximized();
        frame = new QFrame();
        layout = new QHBoxLayout();
        button = new QPushButton("Push");

        layout->addWidget(frame);
        frame->show();
        this->setLayout(layout);

        Setstyles();
    }

2 个答案:

答案 0 :(得分:2)

问题是,QFrame继承自QWidget,如果它没有父级,它将创建一个窗口。

来自QWidget:details section

  

每个小部件的构造函数都接受一个或两个标准参数:

     
      
  1. QWidget * parent = 0是新窗口小部件的父级。如果它是0(默认值),则新窗口小部件将是一个窗口。如果没有,它将是父级的子级,并受父级几何的约束(除非您将Qt :: Window指定为窗口标志)。
  2.   

要修复您的特定情况,请使用父级

创建QFrame对象
frame = new QFrame(this);

答案 1 :(得分:0)

您无法设置QMainWindow(或简单子类)的布局,您只能设置它的中心窗口小部件。我假设您的MainWindowQMainWindow的子类。但是您当然可以将布局设置为该中央窗口小部件,因此您可以执行此操作:

MainWindow::MainWindow() // parent will be nullptr, so this will be a window
{
    showMaximized();

    // create and set central widget
    QWidget *cw = new QWidget();
    setCentralWidget(cw); // will set cw's parent
    // Note: there's no need to make cw a member variable, because
    // MainWindow::centralWidget() gives direct access to it

    frame = new QFrame();
    layout = new QHBoxLayout();
    button = new QPushButton("Push"); // this is not used at all? why is it here?

    layout->addWidget(frame);
    //frame->show(); // not needed, child widgets are shown automatically
    cw->setLayout(layout); // will set parent of all items in the layout

    Setstyles();
}