C++ 没有带有QStyleOptionButton的图标

C++ 没有带有QStyleOptionButton的图标,c++,qt,delegates,qpushbutton,C++,Qt,Delegates,Qpushbutton,我有个奇怪的问题 我需要在我的QTableView中有一些按钮。我曾经使用QAbstractItemView::setIndexWidget()方法,但在处理较大的模型时,它不是很负责任。因此,我决定切换到QStyledItemDelegate。我的按钮有图标(只有图标,没有文本)。使用setIndexWidget时,我使用了以下代码: ClientDetailsButton::ClientDetailsButton(const Client* _client,

我有个奇怪的问题

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

我通过设置
按钮解决了这个问题
由于默认图标大小为
(-1,-1)
,因此图标不可见。

为什么不能直接绘制图标?它太复杂了,我无法确定它在每台机器上看起来是否正常……不,我想要按钮。我所说的复杂是指使pixmap看起来像按钮上的标准图像。是的,它不是那么简单。更重要的是,这是唯一的解决办法,不是一个解决方案。单独呈现图标不是一个解决方案。