12

我在 QStackedWidget 中使用 QLabel 和 QPLineEdit , QLable 应该几乎是容纳这个小部件的窗口的大小。

但是当我为 QLabel 设置一个超长的文本时,它的扩展太多了,我无法水平减小窗口大小,最小宽度太大了。

我将这三个小部件的大小策略设置为Minimumalready ,它对我不起作用。

更新

也许这样说更好:当没有足够的空间时,如何让 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 回答