【问题标题】:No icon with QStyleOptionButton没有带有 QStyleOptionButton 的图标
【发布时间】:2014-03-02 15:49:28
【问题描述】:

我遇到了一个奇怪的问题。

我需要在我的 QTableView 中有一些按钮。我曾经使用 QAbstractItemView::setIndexWidget() 方法,但是在处理较大的模型时它不是很负责。因此我决定切换到 QStyledItemDelegate。我的按钮有图标(只有图标,没有文字)。在使用 setIndexWidget 时,我使用了以下代码:

ClientDetailsButton::ClientDetailsButton(const Client* _client,
                                         QWidget* _parent) :
    QPushButton("", _parent),
    __current(_client) {

  setIcon(QIcon(":/uiIcons/button-details.png"));
}

而且效果很好。但是当我切换到委托时,我会这样使用它:

QStyleOptionButton button;
button.rect = _option.rect;
button.text.clear();
button.icon = QIcon(":/uiIcons/button-details.png");
button.state = _option.state | QStyle::State_Enabled;

if (_index == __button)
  button.state |= QStyle::State_Sunken;

QApplication::style()->drawControl(QStyle::CE_PushButton, &button, _painter);

按钮本身很好,但它是空的。没有可见的图标。令人惊讶的是,当我使用时,例如:

button.icon = QIcon::fromTheme("dialog-information", QIcon(":/uiIcons/button-details.png"));

主题图标可见。但是如果Qt找不到主题图标,替换还是空白。我尝试了我能想到的一切,但不知道为什么它不起作用。有人有什么想法吗?

【问题讨论】:

  • 为什么不能直接画图标?
  • 它太复杂了,我无法确定它是否在每台机器上看起来都正常......
  • 不,我想要那里的按钮。复杂是指使像素图看起来像按钮上的标准图像。
  • 是的,没那么简单。更重要的是,它是唯一的解决方法,而不是解决方案。
  • 单独渲染图标不是解决办法。

标签: c++ qt delegates qpushbutton


【解决方案1】:

我通过设置button.iconSize=QSize(16,16); 解决了这个问题,因为默认图标大小是(-1,-1),所以图标是不可见的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2020-03-09
    • 2021-05-05
    • 2019-04-11
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多