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

Posted

技术标签:

【中文标题】如何在 Qt 中将项目添加到布局中?【英文标题】:How can I add items to a layout in Qt? 【发布时间】:2012-12-20 09:37:01 【问题描述】:

我正在 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 类时,窗口完全空白!希望有人可以帮助我。谢谢。

干杯,

【问题讨论】:

是的,当然,也许我应该在那里尝试同样的方法并查找生成的代码。 上面关于 Qt Designer 的评论已经过时,并且无论如何都没有指向正确的 Qt 站点。我相信Qt Designer的功能已经融入Qt Creator。 【参考方案1】:

如果父widget已经可见,则需要调用后面添加的widget的show()方法使其可见。

【讨论】:

亲爱的 hyde,如果我这样做,添加的小部件会出现在另一个窗口中! @DídacPérez 那么你在稍后添加小部件的代码上做错了。如果小部件是它自己的窗口,则意味着它没有父窗口,并且将其添加到布局会设置父窗口。您是否有机会将它们添加到新布局,而不是正确父小部件的布局?请将该代码添加到问题中!【参考方案2】:

终于找到了解决办法:

要将布局添加到布局中,请使用 addLayout() 函数而不是 addItem()。我真的不知道有什么区别,但它有效。

感谢您的 cmets!

【讨论】:

【参考方案3】:

我想你可以使用 addWidget 函数添加它......我还没有使用它......你可以试试......

http://qt-project.org/doc/qt-4.8/qgridlayout.html

更多信息请参考以上页面...

【讨论】:

【参考方案4】:

首先将它们的布局设置为父级,然后使用 addWidget 函数向其添加小部件。

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

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

【讨论】:

以上是关于如何在 Qt 中将项目添加到布局中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 中将 QGraphicsEffect 添加到 QAbstractItemView?

如何在 Qt4 中将项目添加到模型并获取新添加项目的索引

在 Qt Creator 中将 TagLib 库添加到 Linux Qt 项目?

在 Qt5 中将布局移动到另一个布局

如何在 recyclerview 适配器中将动态视图添加到 android 布局

如何在具有组合布局的新集合视图中将 CAGradientLayer 添加到 UIBackgroundConfiguration?