C++ 设置QPushButton的最小宽度,同时保持默认的minimumSizeHint行为
在我的应用程序中,我需要所有s的宽度至少为150px,但如果需要,则更大。 为此,我使用了一个全局样式表,该样式表包含许多其他具有以下简单约束的属性:C++ 设置QPushButton的最小宽度,同时保持默认的minimumSizeHint行为,c++,qt,qtstylesheets,qpushbutton,C++,Qt,Qtstylesheets,Qpushbutton,在我的应用程序中,我需要所有s的宽度至少为150px,但如果需要,则更大。 为此,我使用了一个全局样式表,该样式表包含许多其他具有以下简单约束的属性: QPushButton { min-width: 150px; } 问题是,我还希望带有文本的按钮不能在150px内缩小到整个文本无法显示的宽度。 这应该是QPushButton的正常行为,但问题在于,正如文档中所解释的: QLayout永远不会将小部件的大小调整为小于最小大小提示的大小,除非设置了minimumSize或大小策略设置为
QPushButton {
min-width: 150px;
}
问题是,我还希望带有文本的按钮不能在150px内缩小到整个文本无法显示的宽度。
这应该是QPushButton的正常行为,但问题在于,正如文档中所解释的:
QLayout永远不会将小部件的大小调整为小于最小大小提示的大小,除非设置了minimumSize或大小策略设置为QSizePolicy::Ignore。如果设置了minimumSize,将忽略最小大小提示
这导致某些情况下,长文本按钮在启动时以正确的大小显示,但缩小窗口时,按钮变得太小,无法显示所有文本。
我准备了一个简单的例子来说明这种行为:
包括
包括
包括
包括
int main argc,char*argv[]
{
QApplication aargc,argv;
QWidget*w=新的QWidget;
QLayout*布局=新的QHBoxLayoutw;
QPushButton*buttonA=新的QPushButtonA,w;
QPushButton*buttonB=新的QPushButtonB,w;
按钮B->SetStyleSheet最小宽度:150px;
QPushButton*buttonC=新的QPushButton长文本,不适合150px,w;
QPushButton*Button=新的QPushButton检查非常长的文本,该文本不适合150px,w;
按钮->设置样式最小宽度:150px;
布局->添加WidgetButtona;
布局->添加WidgetButtonB;
布局->添加WidgetButtonC;
布局->添加WidgetButtond;
w->show;
返回a.exec;
}
我曾考虑使用将最小宽度约束仅设置为基本宽度<150px的按钮,但这似乎不可行。
有没有一种方法可以实现我对样式表的要求,或者我必须对QPushButton进行子类化并覆盖minimumSizeHint方法,因为我必须替换我应用程序中的许多按钮?如果你对QPushButton进行子类化会更好。但有两种方法可以解决此问题: 您可以将长文本拆分为特定数量的字符,并在鼠标进入按钮时使用setToolTipQString函数显示全文 您可以覆盖父窗口小部件resizeEvent,并可以检查宽度,如果大小变得非常小,则选择方法1 使用Elide文本。不确定这是否有效
我还没有找到一种只使用样式表的方法来实现这一点,但下面是我通过子类化QPushButton提出的解决方案 MyButton.h 包括 类MyButton :公共按钮 { Q_对象 Q_属性INT最小宽度读取最小宽度写入设置最小宽度 公众: MyPushButtonQWidget*parent=nullptr; 虚拟按钮; int最小宽度常数; void setMinWidthint width; 虚拟QSize最小值SizeHint常量覆盖; 私人: int_minWidth; }; MyButton.cpp 包括MyButton.h MyPushButton::MyPushButtonQWidget*父项 :qpushButton租金 ,_min0 { } MyButton::~MyButton { } int mybutdown::minWidth常量 { 返回最小宽度; } void mybutdown::setMinWidthint宽度 { _最小宽度=宽度; } QSize MyButtomple::minimumSizeHint常量 { //如果最小宽度小于minWidth,请将其设置为minWidth //否则返回默认的minimumSizeHint 返回QSizeqMaxQPushButton::minimumSizeHint.width,_minWidth, QPushButton::minimumSizeHint.height; } stylesheet.qss
最小SizeHint宽度小于150px的按钮将被强制设置为该大小,较大的按钮将保留QPushButton的默认行为。我希望避免直接接触代码,因为这已经是一个庞大的项目,我们最近注意到了这个问题。但是看起来没有其他选择,所以我想子类化QPushButton确实是最好的主意。不过我喜欢工具提示技巧,所以我可能会尝试一下。
MyPushButton {
qproperty-minWidth: 150;
}