没有带有QStyleOptionButton的图标

No icon with QStyleOptionButton

本文关键字:图标 QStyleOptionButton      更新时间:2023-10-16

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

我需要在我的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找不到主题图标,替换仍然是空白的。我尝试了我能想到的一切,但不知道为什么它不起作用。有人有什么想法吗?

我通过将button.iconSize=QSize(16,16);设置为默认图标大小(-1,-1)来解决此问题,因此图标不可见。