1
我有QTableView
派生視圖的QStyledItemDelegate
派生對象。我根據模型索引數據類型進一步委託繪畫和編輯器創建。對於bool
s,我想通過複選框來表示狀態 - 但複選框從不出現。無法在QStyledItemDelegate中繪製複選框
這是基礎的委託漆功能:
void Sy_QtPropertyDelegate::paint(QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index) const
{
painter->save();
if (index.column() == 0) {
...
} else {
QVariant var = index.data();
bool modified = index.data(Sy_QtPropertyModel::ModifiedRole).toBool();
// If the data type is one of our delegates, then push the work onto
// that.
auto it = delegateMap_.find(var.type());
if (it != delegateMap_.end()) {
(*it)->paint(painter, option, index);
} else if (var.type() != QVariant::UserType) {
...
} else {
...
}
}
painter->restore();
}
而且bool
子委託漆功能:
void Sy_boolPD::paint(QPainter* painter,
const QStyleOptionViewItem& option,
const QModelIndex& index) const
{
painter->save();
bool checked = index.data().toBool();
bool modified = index.data(Sy_QtPropertyModel::ModifiedRole).toBool();
QStyle* style = Sy_application::style();
if (modified) {
QStyleOptionViewItemV4 bgOpt(option);
bgOpt.backgroundBrush = QBrush(Sy_QtPropertyDelegate::ModifiedColour);
style->drawControl(QStyle::CE_ItemViewItem, &bgOpt, painter);
}
QStyleOption butOpt(option);
butOpt.state = QStyle::State_Enabled;
butOpt.state |= checked ? QStyle::State_On : QStyle::State_Off;
style->drawControl(QStyle::CE_CheckBox, &butOpt, painter);
painter->restore();
}
如果我強迫modified
是真實的,背景是表的顏色cout
ing butOpt
的rect
和state
成員顯示他們是正確的 - 但沒有顯示覆選框!將QStyle::CE_CheckBox
設置爲任何其他類型也會導致無法呈現。
我已經和Qt的MVC框架合作過很多次,但是我看不出這裏出了什麼問題。