在我的应用程序中,我需要所有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/