Qt - QTableView - кликабельная кнопка в строке таблицы

Мне нужна кнопка/ссылка в строке таблицы QTableView. Это должно открыть диалоговое окно, позволяющее более эффективно редактировать эту строку.

После нескольких часов поиска в Интернете я еще не нашел достойного примера.

Я знаю, что это, скорее всего, будет сделано с помощью QItemDelegate, но я не уверен, как иметь функциональный виджет в строке, не переводя элемент в режим редактирования.

Любая помощь будет принята с благодарностью.


person cweston    schedule 10.12.2010    source источник
comment
Что вы имеете в виду, говоря «Кнопка в строке таблицы»? Весь ряд? Или в одной клетке?   -  person Pie_Jesu    schedule 11.12.2010


Ответы (2)


Вы можете эмулировать функциональность ссылки, подчеркнув кликабельный текст, затем зафиксировав щелчок по ячейке с помощью сигнала cellClicked(row, col) и проверив, что col == editColumn. Тогда строка будет соответствовать тому элементу, который вы редактируете.

Например,

Имя данных | Значение 1 | Значение 2 | Изменить

connect (tableWidget, SIGNAL(cellClicked(int,int)), this, SLOT(editSlot(int, int)));

...

void ClassName::editSlot(int row, int col){
  if (col == 3) {
    doWork(row);
  }
}
person GatorGuy    schedule 13.12.2010
comment
Почему принятый ответ неизменно не отвечает на вопрос? Определение нового соединения сигнал-слот просто для добавления одной статической кнопки или ссылки на элемент таблицы во время определения таблицы бессмысленно. Честно говоря, StackOverflow должен просто по умолчанию динамически помечать ответ, получивший наибольшее количество голосов, как принятый. - person Cecil Curry; 28.02.2018

Для этого вы можете использовать setIndexWidget. Дополнительную информацию см. в документации Qt.

Например, чтобы встроить кнопку в первый столбец второй строки (непроверенный код):

tableView->setIndexWidget(tableView->model()->index(2, 1), new QPushButton);
person Ton van den Heuvel    schedule 11.12.2010
comment
Я читал, что в больших наборах данных установка виджета уровня строки может привести к заметной потере производительности. - person cweston; 30.12.2010