c++ - QStyleOptionButton 没有图标

标签 c++ qt delegates qpushbutton

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

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

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

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

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

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) 所以图标是不可见。

关于c++ - QStyleOptionButton 没有图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22129756/

相关文章:

c++ - Visual Studio const_iterator 分配错误

c++ - 在 Qt 控制台场景中未调用析构函数

c++ - Qt 布局以自身为中心

c# - 如何对采用委托(delegate)列表的函数使用 lambda 表达式

iphone - 为什么我的 Application Delegate 中的类变量没有被实例化?

使用 g++ 链接到 C++ dll 的 C++ 库

c++ - 通过引用传递 std::string 数组

python - 尝试使用 QProcess 运行 python 控制台时无法获得输出

c# - 如何在 C# 中创建完全参数化的方法委托(delegate)?

c++ - std::get 与 std::tuple 的效率