如何从Qtable小部件获取行值

时间:2019-06-13 11:55:25

标签: qt

实际上,我是在表格的一列中插入组合框,并且从表中选择了一个组合框时,我想获取行值。该怎么做?

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"QComboBox"
#include "QDebug"
#include "QModelIndexList"
#include "QTableWidgetItem"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

QComboBox *s = new QComboBox;
s->insertItem(1,"INt");
ui->tableWidget->setCellWidget(1,1,s);

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_tableWidget_clicked(const QModelIndex &index)
{
 qDebug("ROW %d",index.row());
}

我尝试过类似的操作,但在插入组合框的地方没有给出行值,而从其他地方返回行值

1 个答案:

答案 0 :(得分:0)

我不确定您要实现的目标,但是也许您正在寻找可以为特定行或列设置的ItemDelegate,但不能为表中的特定元素设置。也许发布的解决方案将帮助您创建最少的可重复示例。

#include <QApplication>
#include <QComboBox>
#include <QDebug>
#include <QTableWidget>
#include <QStyledItemDelegate>

class ComboBoxDelegate : public QStyledItemDelegate{

public:

    virtual QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
    {
        auto s = new QComboBox(parent);
        s->insertItem(1, "First");
        s->insertItem(2, "Second");
        return s;
    }

};

int main(int argc, char** args) {
    QApplication app(argc, args);
    auto table = new QTableWidget;
    table->setRowCount(2);
    table->setColumnCount(2);
    table->setItemDelegateForColumn(0, new ComboBoxDelegate);

    auto s = new QComboBox;
    s->insertItem(1, "First");
    s->insertItem(2, "Second");
    table->setCellWidget(1, 1, s);
    QObject::connect(table, &QTableWidget::itemChanged, [&](QTableWidgetItem* item) {
        qDebug() << item->row();
    });
    table->show();
    app.exec();
}