我从 QTableView 派生了一个类。我已经将 Widget QTableView 提升为 Qt creator 中的派生类。并尝试在派生类中实现自定义委托,这似乎不起作用。但是当我将 QTableView Widget 降级为 QTableView 时。自定义委托工作。
我试图通过文档但找不到任何解决方案。我错过了什么吗?
更新:
我检查了 Paint() 方法被调用但不是 createEditor 方法。
您可以在下面找到代码。
Geometry.cpp(从 QTableView 派生的类的构造函数)
Geometry::Geometry(QWidget *parent) :
QTableView(parent)
{
this->setAcceptDrops(true);
this->setSelectionMode(QAbstractItemView::ExtendedSelection);
this->setContextMenuPolicy(Qt::CustomContextMenu);
this->setEditTriggers(QAbstractItemView::NoEditTriggers);
grpModel = new QStandardItemModel();
grpModel->setHorizontalHeaderItem(0,new QStandardItem ("Geometry part"));
grpModel->setHorizontalHeaderItem(0,new QStandardItem ("Surface property"));
this->setModel(grpModel);
}
MyDelegate.cpp(自定义委托的定义)
QWidget* MyDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
//Definition
this method is not called
}
void MyDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
//definition
}
void MyDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
//definition
}
void MyDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
editor->setGeometry(option.rect);
}
void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyledItemDelegate::paint(painter,option,index); // This method is called
}
主窗口.cpp
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->tableGeometry->setModel(grpModel); //tabelGeometry is promoted to Geometry
comboDelegate = new MyDelegate();
ui->tableGeometry->setItemDelegate(comboDelegate);
}