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

干杯,

4

4 回答 4

4

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

于 2012-12-20T10:02:50.123 回答
4

最后我找到了解决方案:

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

感谢您的意见!

于 2012-12-20T11:13:14.750 回答
0

我想您可以使用 addWidget 函数添加它...我还没有使用它...您可以尝试一下...

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

有关更多信息,请参阅上面的页面...

于 2012-12-20T10:00:08.257 回答
0

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

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

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

于 2012-12-20T10:56:56.823 回答