0

我有一个qtc++. 我希望相同的应用程序可以在带有触摸屏的小型嵌入式设备中运行,但是很少的尺寸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;
}

我能够更改Icon sizeusingsetIconSize成员函数setPointSize,但setFont不执行任何操作。我想要更大的文本和图标。

我有一个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; 
}

编辑:

下面的代码显示了我如何添加QToolButtonAdvancePlotToolbar.

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

    QHBoxLayout *layout = new QHBoxLayout;

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

}
4

1 回答 1

1

设置样式表会覆盖您在 C++ 代码中设置的字体大小。在不应用任何样式表的情况下尝试(甚至是QApplication)并检查。(另外如何在 Qt 中设置按钮标签的字体大小?

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

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

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

于 2019-09-18T01:07:15.857 回答