我有一个奇怪的问题。
我需要在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找不到主题图标,则替换仍然是空白。我尝试了所有我能想到的东西,并且不知道它为什么不起作用。有人有什么想法吗?
答案 0 :(得分:6)
我通过设置b utton.iconsize=QSize(16,16)
解决了这个问题。默认图标大小为(-1,-1)
,因此图标不可见。试一试!