【问题标题】:custom QWidget layout problems自定义 QWidget 布局问题
【发布时间】:2011-08-10 11:19:26
【问题描述】:

我对 QT 还很陌生,我已经创建了我的第一个自定义 QWidget 子类...一切都很好,直到我尝试向它添加一些标签。他们都被挤到顶角。

这是我的代码:

   ARView::ARView(QWidget *parent, const char *name) {
deviceLBL = new QLabel(this);
targetLBL = new QLabel(this);
deviceHeadingLBL = new QLabel(this);
targetHeadingLBL = new QLabel(this);
distanceLBL = new QLabel(this);

QVBoxLayout *layout = new QVBoxLayout();

layout->addWidget(deviceLBL);
layout->addWidget(targetLBL);
layout->addWidget(deviceHeadingLBL);
layout->addWidget(targetHeadingLBL);
layout->addWidget(distanceLBL);

this->setLayout(layout);

this->setupLocationUpdates();

}

有谁知道我做错了什么?为什么不是所有这些标签都被布置在一个网格中? 或者,如果它们是 - 为什么网格不使用我所有子类的可用空间?

干杯,

詹姆斯

【问题讨论】:

    标签: qt4 qt-creator qwidget


    【解决方案1】:

    也许这个名字是骗人的,但 QVBoxLayout 不是网格布局。这是一个垂直盒子布局。这意味着它应该按照您添加它们的顺序从上到下排列您的项目。

    所以你想要的实际上是一个 QGridLayout。如果您查看这种布局的文档,您会看到以下功能:

    void    addWidget ( QWidget * widget, int row, int column, Qt::Alignment alignment = 0 )
    void    addWidget ( QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = 0 )
    

    这些应该允许您将小部件放在网格中的任何位置。

    所以我在下面添加的代码会将 deviceLBL 和 targetLBL 放在第一行,将 deviceHeadingLBL 和 targetHeadingLBL 放在第二行,只是为了好玩,将 distanceLBL 放在第三行但占用 2 列空间。

    QGridLayout *layout = new QGridLayout ();
    
    layout->addWidget(deviceLBL, 0, 0);
    layout->addWidget(targetLBL, 0, 1);
    layout->addWidget(deviceHeadingLBL, 1, 0);
    layout->addWidget(targetHeadingLBL, 1, 1);
    layout->addWidget(distanceLBL, 2, 0, 1, 2);
    

    应该是这样的:

    【讨论】:

      【解决方案2】:

      创建小部件后,您需要将它们添加到网格布局中。

      参见QGridLayout的addWidget()方法。

      【讨论】:

      • 感谢您的建议,我已经尝试过了,但结果是一样的。 (我已经更新了我的原始帖子以包含新代码)。
      • 使用行和列值。你没有使用它们。布局->addWidget(deviceLBL,0,0);布局->addWidget(targetLBL,0,1);等等
      • 感谢您的建议。我试过这个,但值不是行和列值。第一个是拉伸值,第二个是对齐值。请问设置行和列的正确方法是什么?
      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      相关资源
      最近更新 更多