首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么QComboBox忽略其固定的垂直大小策略?

为什么QComboBox忽略其固定的垂直大小策略?
EN

Stack Overflow用户
提问于 2015-08-25 09:32:32
回答 1查看 987关注 0票数 2

我有一个有两个堆叠层的小部件。第一个看起来是这样的,很好:

第二个看起来是这样的,这是错误的。

下面是生成小部件并打印大小策略的完整代码。

代码语言:javascript
复制
#include <QtWidgets>

int main (int argc, char ** argv)
{
    QApplication app (argc, argv);

    QWidget w;
    auto stack = new QStackedWidget ();
    QWidget * labelbox = new QWidget ();
    QWidget * combobox = new QComboBox ();
    QWidget * label = new QLabel ("Label");
    QWidget * button = new QPushButton ("Button");
    QWidget * date = new QDateTimeEdit ();

    auto gl = new QGridLayout (& w);
    auto hl = new QHBoxLayout (labelbox);

    hl -> addWidget (label);
    hl -> addWidget (button);

    stack -> addWidget (labelbox);
    stack -> addWidget (combobox);
    stack -> setCurrentIndex (1); // 0 is the good layer, 1 is the bad

    gl -> addWidget (date);
    gl -> addWidget (stack, 0, 1);

    w .setMinimumSize (300, 200);
    w .show ();

    for (auto x : {(QWidget *) stack, labelbox, combobox, label, button, date})
    {
        qWarning ()
            << x -> metaObject () -> className ()
            << x -> sizePolicy ();
    }
    return app .exec ();
}

标准如下:

代码语言:javascript
复制
QStackedWidget QSizePolicy(horizontalPolicy = 5, verticalPolicy = 5)
QWidget        QSizePolicy(horizontalPolicy = 5, verticalPolicy = 5)
QComboBox      QSizePolicy(horizontalPolicy = 5, verticalPolicy = 0)
QLabel         QSizePolicy(horizontalPolicy = 1, verticalPolicy = 5)
QPushButton    QSizePolicy(horizontalPolicy = 1, verticalPolicy = 0)
QDateTimeEdit  QSizePolicy(horizontalPolicy = 1, verticalPolicy = 0)

这些值的文档如下:

代码语言:javascript
复制
QSizePolicy::Fixed      = 0 The QWidget::sizeHint() is the only acceptable alternative, so the widget can never grow or shrink (e.g. the vertical direction of a push button).
QSizePolicy::GrowFlag   = 1 The widget can grow beyond its size hint if necessary.
QSizePolicy::ExpandFlag = 2 The widget should get as much space as possible.
QSizePolicy::ShrinkFlag = 4 The widget can shrink below its size hint if necessary.
QSizePolicy::IgnoreFlag = 8 The widget's size hint is ignored. The widget will get as much space as possible.

所以看起来垂直大小策略是Fixed,除了QStackedWidget,包含标签和按钮的QWidget,以及QLabel,它们都有GrowFlag|ShrinkFlag

为什么QComboBox会垂直增长,尽管它有Fixed政策?为什么这种情况不会发生在QPushButtonQDateTimeEdit上?

这发生在Ubuntu15.04上的QT4.8和QT5.1中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 10:17:53

您正在将组合框直接分配给QStackedWidget,但尚未首先将其添加到QLayout中。将其分配给布局,将此布局添加到QWidget,然后将此QWidget添加到QStackedWidget中。

示例:

代码语言:javascript
复制
QWidget * combowidget = new QWidget ();
QWidget * combobox = new QComboBox ();

auto vl = new QVBoxLayout (combowidget);

vl->addWidget(combobox);
stack->addWidget (combowidget);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32200424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档