在QTableView中获取ComboBoxItemDelegate的索引

问题描述 投票:0回答:1

我创建了一个ComboBoxItemDelegate,并将其添加到QTableView的第一列中。我尝试使用

currentIndexChanged(int index)

连接内的方法可在ComboBox中获取所选项目的索引。这是我写的

connect(cbd, SIGNAL(currentIndexChanged(int)), this, SLOT(onComboboxActivated(int)));

但是它似乎不起作用。调试说

QObject :: connect:没有这样的信号MyComboBoxDelegate :: currentIndexChanged(int)

我在互联网上进行搜索,但没有一个论坛主题可以帮助我解决问题。

这是我的mycomboboxitemdelegate.cpp

#include "mycomboboxitemdelegate.h"

MyComboBoxDelegate::MyComboBoxDelegate(QObject *parent)
    : QStyledItemDelegate(parent){

}

MyComboBoxDelegate::~MyComboBoxDelegate()
{
}


QWidget *MyComboBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QComboBox *cb = new QComboBox(parent);

    cb->addItem(QString("Debut Match"));
    cb->addItem(QString("Ligne Droite"));
    cb->addItem(QString("Courbe"));
    cb->addItem(QString("Action"));
    cb->addItem(QString("Recalage"));
    cb->addItem(QString("Fin du match"));
    cb->addItem(QString("Consigne XYT"));

    return cb;
}

void MyComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
    QComboBox *cb = qobject_cast<QComboBox *>(editor);
    Q_ASSERT(cb);
    model->setData(index, cb->currentText(), Qt::EditRole);
}

void MyComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    QComboBox *cb = qobject_cast<QComboBox *>(editor);
    Q_ASSERT(cb);
    // get the index of the text in the combobox that matches the current value of the item
    const QString currentText = index.data(Qt::EditRole).toString();
    const int cbIndex = cb->findText(currentText);
    // if it is valid, adjust the combobox
    if (cbIndex >= 0)
       cb->setCurrentIndex(cbIndex);
}

和我的mycomboboxitemdelegate.h

#ifndef MYCOMBOBOXITEMDELEGATE_H
#define MYCOMBOBOXITEMDELEGATE_H

#include <QStyledItemDelegate>
#include <QString>
#include <QComboBox>
#include <QtWidgets>

class MyComboBoxDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    MyComboBoxDelegate(QObject *parent = nullptr);
    ~MyComboBoxDelegate() override;

    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
    void setEditorData(QWidget *editor, const QModelIndex &index) const override;
    void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
};

#endif // MYCOMBOBOXITEMDELEGATE_H

感谢您的帮助!

c++ qt tableview qcombobox qstyleditemdelegate
1个回答
0
投票

由于只有一个委托,每个单元都不委托-为什么您完全需要此信息?您正在MyComboBoxDelegate :: createEditor()中创建实例-如果您确实愿意,也可以在此处连接信号。

© www.soinside.com 2019 - 2024. All rights reserved.