在我的应用程序中,我需要所有QPushButton的宽度至少为150px,但如果需要,则更大。
为此,我使用具有以下简单约束的全局样式表(包含许多其他属性):

QPushButton {
    min-width: 150px;
}


问题是,我还希望按钮的文本不能容纳在150px之内,因此不能缩小到不能显示整个文本的宽度。
这应该是QPushButton的正常行为,但是问题是,如minimumSizeHint()文档中所述:


  除非设置了minimumSize()或将大小策略设置为QSizePolicy :: Ignore,否则QLayout绝不会将窗口小部件的大小调整为小于最小大小提示。如果设置了minimumSize(),则最小尺寸提示将被忽略。


这导致在某些情况下,带有长文本的按钮在启动时以正确的大小显示,但是在缩小窗口时,按钮太小而无法显示所有文本。
我准备了一个简单的示例来显示此行为:

#include <QWidget>
#include <QApplication>
#include <QHBoxLayout>
#include <QPushButton>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget *w = new QWidget();
    QLayout* layout = new QHBoxLayout(w);

    QPushButton* buttonA = new QPushButton("A", w);
    QPushButton* buttonB = new QPushButton("B", w);
    buttonB->setStyleSheet("min-width: 150px");
    QPushButton* buttonC = new QPushButton("Long long text that doesn't fit in 150px", w);
    QPushButton* buttonD = new QPushButton("Very very very long text that doesn't fit in 150px", w);
    buttonD->setStyleSheet("min-width: 150px");

    layout->addWidget(buttonA);
    layout->addWidget(buttonB);
    layout->addWidget(buttonC);
    layout->addWidget(buttonD);

    w->show();

    return a.exec();
}


我考虑过使用dynamic properties来仅对基本宽度
有没有一种方法可以做我想要的样式表,还是我必须继承QPushButton并重写minimumSizeHint()方法(我想避免这种方法,因为我必须替换应用程序中的许多按钮)?

最佳答案

如果您将QPushButton子类化,那就更好了。但是,有两种方法可以解决此问题:


您可以将长文本strip设置为特定数目的字符,并在鼠标进入按钮时使用setToolTip(QString)功能显示全文。
您可以覆盖父窗口小部件resizeEvent,并且可以检查宽度,如果尺寸真的很小,可以使用方法1。
使用Elide Text example to get idea about elide for QPushButton。不知道这是否行得通。

关于c++ - 设置QPushButton的最小宽度,同时保持默认的minimumSizeHint行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56035625/

10-12 23:34