【问题标题】:QT - Adding widgets to horizontal layoutQT - 将小部件添加到水平布局
【发布时间】:2013-05-01 21:23:44
【问题描述】:

我有一个水平布局,我正在使用添加小部件

ui->horizontalLayout->addWidget(label);

但添加策略不是我想要的。例如,当我添加项目时,它首先放置开头,然后放置在末尾并继续从末尾放置。

但是,我想要的是,当我将小部件添加到布局时,它应该放在前一个小部件旁边。像那样 ,

有可能吗?

【问题讨论】:

    标签: c++ qt layout widget


    【解决方案1】:

    添加完所有小部件后,添加一个担架。

    ui->horizontalLayout->addStretch();
    

    会的。

    【讨论】:

    • 这对我来说似乎很奇怪。您是在添加小部件之后添加的,对吧?
    • 是的。 for循环完成后(添加所有小部件后),我添加ui->horizontalLayout->addStretch();
    【解决方案2】:

    您可以在水平布局的外部或水平布局的内部添加spacer item。如果在水平布局中添加间隔项,则必须确保在间隔项之前添加标签小部件。在这种情况下,使用 insertWidget() 函数添加您的标签。

    或者您可以在添加标签小部件后将 spaceritem 添加到水平布局的末尾。

    这是一个例子:

    QHBoxLayout *hlayout = new QHBoxLayout;
    ui->verticalLayout->addLayout(hlayout);
    QSpacerItem *item = new QSpacerItem(1,1, QSizePolicy::Expanding, QSizePolicy::Fixed);
    hlayout->addSpacerItem(item);
    for(int i = 0; i < 10; i++)
    {
        QLabel *label = new QLabel("NOTE");
        hlayout->insertWidget(i, label);
    }
    

    【讨论】:

    • 你有更具体的例子如何使用间隔项吗?
    • @abby 我修改了答案并添加了一个示例。
    • 它像我在问题中放入的第二张图片一样添加。但我不想像第三张图片那样在笔记之间留任何空格。
    • @abby 如果您使用正确的尺寸政策将间隔项目添加到正确的位置,则不会发生这种情况。如果添加间隔项有什么不同吗?
    【解决方案3】:

    setAlignment(Qt::AlignLeft); 应该可以解决问题。您也可以将其用于:
    setSpacing(0);setContentsMargins(0, 0, 0, 0);
    删除小部件之间的额外空间。

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多