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

时间:2014-06-24 14:29:04

标签: qt qtableview qitemdelegate

我从QTableView派生了一个类。我已将Widget QTableView升级为Qt创建者中的派生类。并尝试在派生类中实现自定义委托,这似乎不起作用。但是当我将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
 }

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);
 }

1 个答案:

答案 0 :(得分:2)

解决方案是那个

我已从Geometry.cpp类的构造函数中删除了this->setEditTriggers(QAbstractItemView::NoEditTriggers);。我所理解的是,委托被附加但未被调用,因为必须可以编辑项目才能调用委托。