gpt4 book ai didi

c++ - 设置 QPushButton 的最小宽度,同时保持默认的 minimumSizeHint 行为

转载 作者:行者123 更新时间:2023-11-28 04:18:26 24 4
gpt4 key购买 nike

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

QPushButton {
min-width: 150px;
}

问题是,我还希望带有不适合 150px 的文本的按钮无法缩小到整个文本都不会显示的宽度。
这应该是 QPushButton 的正常行为,但问题是,正如 minimumSizeHint() 的文档中所解释的那样:

QLayout will never resize a widget to a size smaller than the minimum size hint unless minimumSize() is set or the size policy is set to QSizePolicy::Ignore. If minimumSize() is set, the minimum size hint will be ignored.

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

#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仅对基本宽度 < 150px 的按钮设置最小宽度约束,但这似乎不可行。

有没有办法用样式表做我想做的事情,或者我必须继承 QPushButton 并覆盖 minimumSizeHint() 方法(我想避免这种情况,因为我必须替换很多我的应用程序中的按钮)?

最佳答案

如果您对 QPushButton 进行子类化会更好。但是有 2 个解决此问题的方法:

  1. 您可以将长文本剥离为特定数量的字符,并使用setToolTip(QString) 函数在鼠标进入按钮时显示全文。

  2. 您可以覆盖父小部件 resizeEvent 并且可以检查宽度,如果尺寸变得非常小,则使用方法 1。

  3. 使用省略文本 example to get idea about elide for QPushButton .不确定这是否有效。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com