11

QLabel内容に関係なく、コンテナの幅いっぱいに広げたいです。(テキストを動的に設定し、後でウィジェットを追加すると、テキストの一部が切り取られるため、これが必要です)

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    this->setFixedSize(100,100);
    QHBoxLayout *layout = new QHBoxLayout;
    this->setLayout(layout);
    QLabel *label = new QLabel;
    label->setStyleSheet("background-color:blue");
    label->setSizePolicy(QSizePolicy::MinimumExpanding, 
                         QSizePolicy::MinimumExpanding);
    label->setText(tr("test"));
    layout->addWidget(label, 0, Qt::AlignTop | Qt::AlignLeft);
}

このコードは、青いボックスが幅全体に拡張されていないことを示しています。なぜですか?

4

1 に答える 1

12

以下を設定する必要があります。

layout->setContentsMargins(0,0,0,0);

デフォルトでは、すべての QWidget または QFrame は、すべての方向に 15 ピクセルのマージンを追加します。

主な問題は、ウィジェットをレイアウトに追加するときの配置の設定にあります。label->setAlignment代わりに使用してください。

layout->addWidget(label);

私はあなたのコードをコンパイルしました、それはそれらの変更で動作します。

最小限の例を次に示します。

#include <QApplication>
#include <QtGui>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget* w = new QWidget;
    w->setFixedSize(100,100);
    QHBoxLayout* layout = new QHBoxLayout;
    layout->setContentsMargins(0,0,0,0);
    w->setLayout(layout);
    QLabel* label = new QLabel;
    label->setAlignment(Qt::AlignTop | Qt::AlignLeft);
    label->setContentsMargins(0,0,0,0);
    label->setStyleSheet("background-color:blue");
    label->setSizePolicy(QSizePolicy::MinimumExpanding,
                     QSizePolicy::MinimumExpanding);
    label->setText("test");
    layout->addWidget(label);
    w->show();
    return a.exec();
}
于 2012-12-21T19:58:20.357 に答える