对从QTableView派生的类使用自定义委托

对从QTableView派生的类使用自定义委托,qt,qtableview,qitemdelegate,Qt,Qtableview,Qitemdelegate,我从QTableView派生了一个类。我已经将小部件qtableview升级为Qt creator中的派生类。并尝试在派生类中实现自定义委托,这似乎不起作用。但是当我将QTableView小部件降级为QTableView时。自定义委托工作 我试图查看文档,但找不到任何解决方案。我遗漏了什么吗 更新: 我已检查是否调用了Paint()方法,但没有调用createEditor方法 您可以在下面找到代码 Geometry.cpp(从QTableView派生的类的构造函数) MyDelegate.cpp

我从QTableView派生了一个类。我已经将小部件qtableview升级为Qt creator中的派生类。并尝试在派生类中实现自定义委托,这似乎不起作用。但是当我将QTableView小部件降级为QTableView时。自定义委托工作

我试图查看文档,但找不到任何解决方案。我遗漏了什么吗

更新:

我已检查是否调用了Paint()方法,但没有调用createEditor方法

您可以在下面找到代码

Geometry.cpp(从QTableView派生的类的构造函数)

MyDelegate.cpp(自定义委托的定义)

mainwindow.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);
 }
解决办法是


我已经删除了
this->setEditTriggers(QAbstractItemView::NoEditTriggers)来自类Geometry.cpp的构造函数。据我所知,代理已被附加但未被调用,因为要调用代理,项目必须是可编辑的。

您应该澄清什么不起作用。显示一些SSCCE。您确定您的项目是可编辑的吗?请参阅
setFlags
method。@DmitrySazonov:你说得对,我已经在来自QTabelView的派生类的构造函数中将标志设置为NoEditTriggers。不要在问题中添加“已解决”。如果你有一个解决方案,把它作为你自己问题的答案贴出来。如果问题无法再现,请删除该问题。事实上,我们有一个“已解决”的问题,看不到解决方案。请按照库巴·奥伯的解释发布解决方案。
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
 }
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);
 }