0
在qt的項目/視圖框架中,我試圖保存一個QColorDialog作爲用戶數據,然後檢索該對話框作爲編輯器,以及在繪製期間在tableview中。qvariant_cast導致段錯誤
在我的類的構造函數我做
QStandardItem *item = new QStandardItem();
QColorDialog *colorDlg = new QColorDialog(QColor(0,0,255), this);
item->setData(QVariant::fromValue(colorDlg), ColorDialogRole);
mTableModel->setItem(0,2,item);
然後,我委託的paint函數中我有
void ReportFigureTableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QVariant vColorDlg= index.data(ReportFigure::ColorDialogRole);
if(vColorDlg.isValid())
{
////////////////////////////////////////////////
// Program segfaults on the next line ... why?
////////////////////////////////////////////////
QColorDialog *colorDlg = qvariant_cast<QColorDialog*>(vColorDlg);
if(colorDlg != NULL)
{
painter->save();
QStyleOptionViewItem opt = option;
initStyleOption(&opt, index);
painter->fillRect(opt.rect, colorDlg->selectedColor());
painter->restore();
}
else
QStyledItemDelegate::paint(painter, option, index);
}
else
QStyledItemDelegate::paint(painter, option, index);
}
在運行時,該表顯示了在第一時間(雖然與錯誤的顏色。 ..我假設的不同問題)。我雙擊編輯單元格,並按預期調出對話框。但是,當我關閉時,它會在指定的行上發生段錯誤。我不明白爲什麼,因爲我認爲我正在做所有必要的檢查。
先前設置的項目根據該文件,QModelIndex ::數據()訪問所引用的項目的數據;即它相當於itemFromIndex(index) - > data()。 ReportFigure :: ColorDialogRole已經設置爲Qt :: UserRole,所以不應該是問題。 – ryan0270