Как получить значение строки из виджета Qtable - PullRequest
0 голосов
/ 13 июня 2019

На самом деле я вставляю поле со списком в один столбец на моей таблице, и когда выбрано одно из полей со списком из таблицы, я хочу получить значение строки. Как это можно сделать?

#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 голосов
/ 13 июня 2019

Я не совсем уверен, чего вы пытаетесь достичь, но, возможно, вы ищете 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...