如何在Qt中向布局添加项目?

4

我正在使用Qt 4.8.4开发一个应用程序,以下是我的操作:

我将QGridLayout子类化如下:

class Viewer : public QGridLayout
{
    Q_OBJECT
    ...................
private:
    // Objects
    /// Maximize button object
    ViewerGeneric* viewerGeneric;

    /// Maximize button object
    QPushButton* btnMaximize;

    /// Close button object
    QPushButton* btnClose;

    /// Connect button object
    QPushButton* btnConnect;

    /// Central viewer layout object
    QGridLayout* viewer;

    /// Indicates the row position in the main grid
    unsigned int row;

    /// Indicates the column position in the main grid
    unsigned int col;
};

然后在构造函数中我会这样做:

// Create the objects
btnMaximize = new QPushButton("max");
btnClose = new QPushButton("close");
btnConnect = new QPushButton("connect");

// Add the horizontal toolbar
QHBoxLayout* toolbar = new QHBoxLayout();
toolbar->setSizeConstraint(QLayout::SetMinimumSize);
toolbar->addItem(new QSpacerItem(0, 0, 
                     QSizePolicy::Expanding, QSizePolicy::Minimum));
toolbar->addWidget(btnMaximize);
toolbar->addWidget(btnClose);

// Add the 'Connect' button
viewer = new QGridLayout();
viewer->addWidget(btnConnect);

// Add the widgets
this->addItem(toolbar, 0, 0);
this->addItem(viewer, 0, 0, 2);

但是最后,当我在主窗口中展示Viewer类时,窗口完全空白!希望有人能帮助我。谢谢。

祝好,


是的,当然,也许我应该尝试在那里做同样的事情并查找生成的代码。 - Didac Perez Parera
上面关于Qt Designer的评论已经过时了,而且也没有指向正确的Qt网站。我相信Qt Designer的功能已经被整合到Qt Creator中了。 - Daniel Underwood
4个回答

4
如果父部件已经可见,则需要调用后添加的小部件的 show() 方法使它们可见。

亲爱的hyde,如果我这样做,添加的小部件会出现在另一个窗口! - Didac Perez Parera
1
@DídacPérez 如果您稍后添加小部件的代码有问题,那么您正在做错事情。如果小部件是自己的窗口,则表示它没有父级,并将其添加到布局中设置父级。您是否碰巧将它们添加到新布局而不是正确父部件的布局中?请将该代码添加到问题中! - hyde

4

我终于找到了解决办法:

如果要将布局添加到布局中,请使用addLayout()函数而不是addItem()。我不太清楚它们之间的区别,但这样做可行。

感谢您的评论!


0

0

先将布局设置为父级,然后使用addWidget函数将小部件添加到其中。

如果需要,您可以使用show()和hide()函数来避免闪烁,并一次性显示布局中的所有内容。

如果不需要动态添加小部件,则应尝试使用QT设计师并创建一个.ui类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接