2010-12-10 5 views
20

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

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

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

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

+0

Что вы имеете в виду, говоря «кнопку в строке таблицы»? Всего строк? Или в одной ячейке? –

ответ

1

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

Например,

Наименование Название | Значение 1 | Значение 2 | Edit

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

... 

void ClassName::editSlot(int row, int col){ 
    if (col == 3) { 
    doWork(row); 
    } 
} 
+0

Почему принятый ответ неизменно не отвечает на вопрос? Определение нового соединения сигнального слота просто для добавления одной статической кнопки или ссылки на элемент таблицы во время определения таблицы является бессмысленным. Честно говоря, StackOverflow должен просто по умолчанию динамически отмечать ответ, который в настоящее время получает большинство upvotes как «принятый». –

20

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

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

tableView->setIndexWidget(tableView->model()->index(2, 1), new QPushButton); 
+1

Я читал, что на больших наборах данных установка виджета уровня может привести к заметной потере производительности. – cweston

Смежные вопросы