【问题标题】:Unable to increase size of QToolButton (with Button style set to Qt::ToolButtonTextBesideIcon)无法增加 QToolButton 的大小(按钮样式设置为 Qt::ToolButtonTextBesideIcon)
【发布时间】:2019-08-26 08:04:09
【问题描述】:

我有一个用c++ 编写的小型qt 应用程序。我希望相同的应用程序在带有触摸屏的小型嵌入式设备中运行,但很少QToolButton 的大小太小而无法舒适地看到。我已经厌倦了通过修改以下函数来增加大小(添加setfont成员调用):

QToolButton* ColorToolBar::setupToolButton(QString name, QString iconPath, bool isCheckable)
{
    QToolButton *p_btn = new QToolButton(this);
    p_btn->setCheckable(isCheckable);
    p_btn->setIcon(QIcon(iconPath));
    p_btn->setIconSize(QSize(ICON_WIDTH, ICON_HEIGHT));
    p_btn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    QFont font = p_btn->font();
    font.setPointSize(10);
    p_btn->setFont(font);

    if (!name.isEmpty())
        p_btn->setText(name);

    p_btn->setMinimumWidth(MINIMUM_WIDTH);
    p_btn->setMinimumHeight(MINIMUM_HEIGHT);
    return p_btn;
}

我可以使用setIconSize 成员函数更改Icon size,但setPointSizesetFont 不执行任何操作。我想要更大的文字和图标。

我有一个类 AdvancePlotToolBar,其中包含所有 QToolButton。我的 qss 文件看起来像:

AdvancePlotToolBar QToolButton {
  border: none;
  padding-right: 10px;
  padding-bottom: 5px; 
}
AdvancePlotToolBar QToolButton:hover {
  border-bottom: 3px solid #52ce90;
  padding-bottom: 5px; 
}
AdvancePlotToolBar QToolButton:pressed {
  border-bottom: 3px solid #52ce90; 
}
AdvancePlotToolBar QToolButton:checked {
  border-bottom: 3px solid #52ce90;
  margin: 0px; 
}

编辑:

下面的代码显示了我如何将QToolButton 添加到AdvancePlotToolbar 的布局中。

AdvancePlotToolBar::AdvancePlotToolBar(QWidget *parent) : QWidget(parent)
{
    transformationButton_ =  setupToolButton("Transformations", "://images//summation.png", true);

    QHBoxLayout *layout = new QHBoxLayout;

    layout->addWidget(transformationButton_);
    setLayout(layout);

}

【问题讨论】:

  • 由于小部件大小(可能)取决于您将小部件插入布局的方式,因此您应该发布相关代码。目前我们只看到按钮的初始化代码,但是缺少布局代码。
  • 用所需的代码更新了我的问题。
  • 您能否发布一个重现此问题的最小示例?不厚脸皮... :) 只是调查。围绕字体肯定存在一些不一致的行为,以及从什么和何时继承的内容,到目前为止,我已经发现了至少一个带有Qt::AA_UseStyleSheetPropagationInWidgetStyles 标志的 Qt 错误,即使根本不使用 CSS。并且让QStyleSheetStyle 参与会产生“意想不到的”差异。但是... QToolButtons 上明确设置字体时,我实际上无法重现您所描述的内容。我想你可能也在其他地方设置字体?我很想重现它。 TIA。

标签: c++ qt font-size qtoolbutton


【解决方案1】:

设置样式表会覆盖您在 C++ 代码中设置的字体大小。在不应用任何样式表的情况下试一试(甚至是QApplication)并检查。 (还有How to set the font size of the label on pushbutton in Qt?

我对完全自定义的QToolButton 有同样的问题,它会覆盖initStyleOption() 并在其中设置自己的字体详细信息(因此每次都会在绘制按钮之前发生,与setFont() 完全无关)。这一直有效,直到应用程序范围的样式表(即使它不直接影响QToolButton!*),或者样式表专门应用于按钮实例或其父项。我还没有找到具体发生在哪里(我想在QStyleSheetStyle 的某个地方),所以我还没有解决方法**。在您的情况下,因为无论如何您都在使用 CSS 作为工具按钮,所以这可能也是设置字体大小的最佳位置。

* 设置样式表可能会影响未在 CSS 规则中专门设置样式的元素的原因是整个底层 QStyle 被替换为 QStyleSheetStyle,以及原始样式(Fusion、WindowsVista、Macintosh 等)成为QStyleSheetStyle 的代理/备用。或者 IOW 所有的绘画都是先通过 CSS 样式过滤的。这包括在单个元素上设置样式表以及在QApplication 上全局设置样式表。

** 我怀疑这是一个 Qt 错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2015-10-29
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多