我有一个自定义Delegate
类继承自QStyledItemDelegate
。在其paint()
事件中,我想添加QStyleOptionButton
这应该是可检查的。可能吗?如何设置QStyleOptionButton就像一个复选框与自定义图标
例如,它表示眼睛图标的可视性;当按下按钮时,眼睛图标变成闭眼图标。
里面的paint()
方法,这是我当前的代码来创建按钮:
QStyleOptionButton buttonVis;
buttonVis.rect = getButtonVisibilityRect();
buttonVis.iconSize = QSize(sizeX, sizeY);
buttonVis.icon = icon;
buttonVis.state = QStyle::State_Enabled;
buttonVis.features = QStyleOptionButton::None;
QApplication::style()->drawControl(QStyle::CE_PushButton, &buttonVis, painter);
,我加载到buttonVis
图标创建:
QIcon icon;
icon.addPixmap(QPixmap(":/control-visibility.svg"), QIcon::Normal, QIcon::On);
icon.addPixmap(QPixmap(":/control-visibilityNo.svg"), QIcon::Normal, QIcon::Off);
对于那一刻,我运行我的程序,该按钮有一个闭着眼睛的图标。是否有命令来控制显示哪个图标?如果我的初始布局不可能实现,那么正确的方向是什么?
编辑:我发现如何选择使用哪个图标来模拟复选框外观。相反,如果线buttonVis.state = QStyle::State_Enabled;
应该有:
if (/* current item checkbox checked? */)
buttonVis.state = QStyle::State_Enabled | QStyle::State_On;
else
buttonVis.state = QStyle::State_Enabled | QStyle::State_Off;
现在的问题是要弄清楚什么是条件或如何从editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
设置。问题在于我不能真正改变option
,因为它是不变的参考。任何想法如何做到这一点,或如何解决它?
感谢您的回复。我发现如何切换图标:'buttonVis.state = QStyle :: State_Enabled | QStyle :: State_Off;'或'buttonVis.state = QStyle :: State_Enabled |将QStyle :: STATE_ON;'。我试过你提出的条件'option.state。testFlag(QStyle :: State_Sunken)',但似乎没有办法。当我点击我的按钮时,似乎没有设置此标志,我不知道如何强制它自动切换状态。在代理的'editorEvent'中,我可以检查何时按下按钮,但是,我不能更改'option',因为它是作为'const&'传递的。 – vicrucann