12

QStackedWidget 内で QLabel と QPLineEdit を使用します。 QLable は、このウィジェットを保持しているウィンドウのサイズに近いはずです。

しかし、非常に長いテキストを QLabel に設定すると、拡大しすぎて、ウィンドウのサイズを水平方向に縮小できず、最小幅が大きすぎました。

これら 3 つのウィジェットのサイズ ポリシーをMinimum既に に設定していますが、うまくいきません。

アップデート

次のように言ったほうがよいかもしれません: 十分なスペースがない場合に QLabel にテキストの一部を表示させる方法

サンプルコード

  #include <QtGui>

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

    QWidget w;
    QLabel *label = new QLabel ("Very very very long text");
    label->setSizePolicy (QSizePolicy::Minimum , QSizePolicy::Fixed);
    QVBoxLayout layout (&w);
    layout.addWidget ( label );
    w.show();
    return  app.exec();
}
4

1 に答える 1

15

私の理解が正しければ、最も簡単な方法は、そのラベルの水平サイズのヒントを無視することです。
そこに他のウィジェットがある限り(またはコンテナに手動で最小幅を強制する限り)、これはあなたが望むことをするはずです:

#include <QtGui>

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

    QLabel *l1 = new QLabel("This very long text doesn't influence "
                            "the width of the parent widget");
    l1->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
    // Style just to make it clear that the widget is 
    // being resized to fit the parent, it doesn't "overflow"
    l1->setFrameShape(QFrame::Box);
    l1->setFrameShadow(QFrame::Raised);
    l1->setAlignment(Qt::AlignHCenter);

    QLabel *l2 = new QLabel("This influences the width");
    l2->setFrameShape(QFrame::Box);
    l2->setFrameShadow(QFrame::Raised);

    QWidget w;
    QVBoxLayout layout(&w);
    layout.addWidget(l1);
    layout.addWidget(l2);
    w.show();
    return app.exec();
}
于 2012-05-06T13:50:37.857 に答える