我有一個自定義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