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