【发布时间】: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