Нет значка с QStyleOptionButton

У меня странная проблема.

Мне нужно иметь несколько кнопок в моем 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 не может найти значок темы, замена по-прежнему остается пустой. Я пробовал все, что мог придумать, и понятия не имею, почему это не работает. У кого-нибудь есть идеи?


person Garrappachc    schedule 02.03.2014    source источник
comment
Почему нельзя нарисовать иконку напрямую?   -  person Dmitry Sazonov    schedule 03.03.2014
comment
Это так сложно, и я никогда не могу быть уверен, что это выглядит нормально на каждой машине...   -  person Garrappachc    schedule 03.03.2014
comment
Что вы подразумеваете под сложным? Сделать вызов painter->drawPixmap вместо всего кода?   -  person Dmitry Sazonov    schedule 03.03.2014
comment
Нет, я хочу кнопку там. Под сложным я подразумеваю создание растрового изображения, похожего на стандартное изображение на кнопке.   -  person Garrappachc    schedule 03.03.2014
comment
Кнопка Draw - затем нарисуйте на ней изображение. Все еще сложно? :)   -  person Dmitry Sazonov    schedule 03.03.2014
comment
Да, это не так просто. Более того, это единственный обходной путь, а не решение.   -  person Garrappachc    schedule 03.03.2014
comment
Использование делегатов не является обходным путем.   -  person Dmitry Sazonov    schedule 03.03.2014
comment
Отрисовка значка отдельно не является решением.   -  person Garrappachc    schedule 03.03.2014
comment
Это ваше мнение. Если вы хотите поговорить вместо использования Qt-способов - вам следует подождать других ответов.   -  person Dmitry Sazonov    schedule 04.03.2014


Ответы (1)


Я решил эту проблему, установив button.iconSize=QSize(16,16); в качестве размера значка по умолчанию (-1,-1), поэтому значок невидим.

person wang dong    schedule 06.01.2015