【问题标题】:How to use Qt layout correctly如何正确使用 Qt 布局
【发布时间】:2013-12-07 19:47:47
【问题描述】:

我正在尝试使用 GUI 布局,看看我能用它做什么。这是我希望实现的:小部件的上半部分有一个标题框,它应该看起来像这样:

*****************************
*        [LOGO]     [button]*
*****************************

徽标应位于框架的中心,左侧没有任何内容。 LOGO右侧也会有一个按钮。 LOGO有固定大小。

我可以在没有按钮的情况下将LOGO设置在中心,但是一旦添加它,LOGO的位置就会改变。

所以我目前的解决方案是在LOGO的左边加一个不带文字的测试标签,这样边框就和中间的LOGO对称了。

但是我仍然对这种布局的正确方法感到好奇,有人可以帮忙吗?非常感谢

【问题讨论】:

    标签: qt layout qlayout


    【解决方案1】:

    您可以考虑使用QGridLayout 并调用QGridLayout::setColumnStrech 来为相应的列分配优先级。您还可以使用QSpacerItem 在小部件之间添加空间。

    下面是一些示例代码:

    QGridLayout *gridLayout = new QGridLayout;
    // Set the minimum widths for all three columns of the grid
    gridLayout->setColumnMinimumWidth(0, 100);
    gridLayout->setColumnMinimumWidth(1, 300);
    gridLayout->setColumnMinimumWidth(2, 100);
    
    // use width 100 to fill the first column
    QSpacerItem *spacer = new QSpacerItem(100, 0);
    QLabel *logo = new QLabel;
    QButton *button = new QButton;
    
    gridLayout->addWidget(spacer, 0, 0);
    gridLayout->addWidget(logo, 0, 1);
    gridLayout->addWidget(button, 0, 2);
    

    另外,请参阅此问题的答案以获取更多信息:QGridLayout, 3 panes, not expanding properly

    【讨论】:

    • 感谢您的回复!我已经尝试了这两种方法,但它们并没有像我预期的那样工作。我可以有一个带有 3 个水平网格的网格布局,但如果我不在最左边的网格内放置任何东西,qt 设计器中的小部件看起来会正确,但是当我运行应用程序时,LOGO 位于不同的位置。在LOGO的左右使用垫片会导致LOGO稍微偏左,因为右边的按钮。
    • 您需要确保第一列和第三列的宽度相同。然后您的第二列将居中。
    • 有没有办法设置列的宽度?在我看来,列的宽度是根据该列内的小部件大小自动设置的。我尝试在设计器内部对其进行调整,但失败了。
    • 我在答案中添加了一些示例代码,以演示如何调整 QSpacerItem 的大小并将项目添加到布局中。
    • 谢谢!很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 2018-12-22
    相关资源
    最近更新 更多