Создание динамической таблицы
пытаюсь создать таблицу с тремя столбцами:
| First | Secont | Third |
|---|---|---|
| 2.6 | 1.4 | 4.0 |
| 1.2 | 1.2 | |
| 0 | ||
| 7.9 | 7.9 |
При заполнении пользователем первых двух ячеек в одной строке, появляется их сумма в третьей.
Вопрос по реализации - возможно сделать это через QTableWidget + слоты/сигналы или же требуется иной инструмент для этого? Просто на данный момент сильно забуксовал на моменте создания сигналов при изменении значения в ячейке, появляются мысли, что выбрал не тот путь для реализации или же просто неверно соединяю сигналы со слотами:
void MainWindow::createUi(qint8 Lines,QStringList headers){
ui->tableWidget->setColumnCount(3);
ui->tableWidget->setRowCount(Lines);
for (int i=1;i==Lines; i++)
{
connect (&ui, ui->tableWidget->cellChanged(i,1),
this, getEmptyCapWeight());
}}
Ответы (1 шт):
начнем с вашего цикла
for (int i=1;i==Lines; i++)
даже если бы он был нужен, в таком виде он не будет работать от слова совсем.
Теперь непосредственно о сигналах-слотах.
Коннекты прописываются в старом или в новом синтаксисе Чаще всего имеет следующий вид:
connect(object1, SIGNAL(signalname(...)), object2, SLOT(slotname(...)))
где:
- object1 - объект, генерирующий сигнал (в вашем случае это таблица ui->tableWidget)
- signalname(...) - сигнатура сигнала (в вашем случае сигнал cellChanged(int, int))
- object2 - объект, содержащий слот, которым будет обрабатываться сигнал (в вашем случае это само главное окно, т.е. this)
- slotname(...) - сигнатура слота (функция - член класса принимающего объекта, прописываемая в заголовочном файле в секции SLOTS: вашего класса. При этом сигнатура слота и сигнала должны совпадать)
Теперь можно написать коннект правильно (обращаю внимание что цикл не нужен):
connect(ui->tableWidget, SIGNAL(cellChanged(int, int)), this, SLOT(mySlot(int,int)))
и обработать сигнал в своем слоте:
void MainWindow::mySlot(int row, int col){
if(col>1) return; // обрабатывать вам надо только изменение в столбцах 0 и 1
int val_0 = ui->tableWidget->item(row,0)->text().toInt();
int val_1 = ui->tableWidget->item(row,1)->text().toInt();
ui->tableWidget->item(row, 2)->setText(QString("%1").arg(val_0+val_1));
}