如何在 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?
在 Qt Creator 中将 TagLib 库添加到 Linux Qt 项目?
如何在 recyclerview 适配器中将动态视图添加到 android 布局
如何在具有组合布局的新集合视图中将 CAGradientLayer 添加到 UIBackgroundConfiguration?