0

我正在以编程方式在 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();
    }
4

2 回答 2

2

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

来自QWidget:details 部分

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

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

要解决您的特定情况,请使用 parent 创建 QFrame 对象:

frame = new QFrame(this);
于 2013-05-31T13:25:01.363 回答
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();
}
于 2014-09-19T19:37:19.007 回答