【问题标题】:Issue with QLayout with QStackedWidgetQStackedWidget 的 QLayout 问题
【发布时间】:2017-01-13 17:39:57
【问题描述】:

我正在实现一个标签样式的 UI。其中选项卡由 QListWidget 显示,内容由 QStackedWidget 显示。在 QStackWidget 的每个页面上都有允许在 QHBoxlayout 中插入面板(小部件)的布局。在每个面板上,都有几个图标再次出现在 QHBoxLayout 中。下面是我想要实现的理想案例。

但在 QStackWidget 的其他页面上,情况并非如此(图标较少),如下所示

我想删除多余的空间(或将图标左对齐以消除面板上图标之间的多余空间)

我尝试了spacer,然后发生了这种情况:(

请帮我纠正这件事。我的间隔代码是

 inline QSpacerItem * buildSpacer(Qt::Orientation orientation)
 {
        QSpacerItem * pSpacer = nullptr;
        if (orientation == Qt::Horizontal)
        {
            pSpacer = new QSpacerItem(1000, UNIT_VALUE, QSizePolicy::Expanding, QSizePolicy::Minimum);
        }
        else
        {
            pSpacer = new QSpacerItem(UNIT_VALUE, 1000, QSizePolicy::Minimum, QSizePolicy::Expanding);
        }
        return pSpacer;
 }

注意 我不想使用 QTabWidget。顺便说一句,QTabWidget 也有这个问题

【问题讨论】:

    标签: c++ qt layout


    【解决方案1】:

    为什么不首先使用QTabWidget

    无论如何,你应该使用addStretch(),而不是自己创建QSpacerItem:

    my_layout->addWidget(new Widget("widget1"));
    my_layout->addWidget(new Widget("widget2"));
    
    my_layout->addStretch(1); // will "eat" extra space
    

    【讨论】:

    • 非常感谢。有效。如果可能的话,你能解释一下我的间隔方法有什么错误吗?
    • 很难说,因为正如documentation 中所述,“通常,您不需要直接使用此类”。所以我从来没有使用过它:p 但是在 Qt 的source code 中,看起来insertStretch(由addStretch 调用)使用了类似于你的代码,除了分隔符是用空大小构造的 (0, 0 )。拉伸值仍然与垫片一起使用,所以也许它不能单独使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多