Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: делагат для QTableWidget
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Модель/Представление
borune
Господа, задача следующая: нужно вставить в таблицу кнопку. В обработчике клика на кнопку надо знать, в какой строке эта кнопка находится. Насколько я понял, если устанавливать кнопку в таблицу при помощи setCellWidget, то номер строки и столбца, где находится виджет узнать невозможно. Сигналы cellClicked и itemClicked не эмитируются ячейкой, в которую вставлен виджет. Как решить задачу?
arhohryakov
Цитата(borune @ 2.2.2015, 15:31) *
Господа, задача следующая: нужно вставить в таблицу кнопку. В обработчике клика на кнопку надо знать, в какой строке эта кнопка находится. Насколько я понял, если устанавливать кнопку в таблицу при помощи setCellWidget, то номер строки и столбца, где находится виджет узнать невозможно. Сигналы cellClicked и itemClicked не эмитируются ячейкой, в которую вставлен виджет. Как решить задачу?

Создайте наследника Кнопки. В наследнике создайте необходимые поля (номер строки, ряда и т.д). Заполняйте их перед установкой кнопки в ячейку. По клику все данные будут внутри.
borune
Цитата(arhohryakov @ 2.2.2015, 16:36) *
Создайте наследника Кнопки. В наследнике создайте необходимые поля (номер строки, ряда и т.д). Заполняйте их перед установкой кнопки в ячейку. По клику все данные будут внутри.


Спасибо, этот вариант я рассматривал. Но я хотел изучить делегаты, вот сейчас пытаюсь разобраться в кутэшном примере. Но походу дела мне тут QItemDelegate не поможет, там есть только метод createEditor, который позволяет редактировать содержимое ячейки, используя заданный виджет, а мне же нужно просто отображать вместо ячейки виджет. Я прав?
lanz
Чтобы делать через делегат можно использовать
http://qt-project.org/doc/qt-4.8/qabstract...ersistentEditor
Но вообще мне кажется проще через
http://qt-project.org/doc/qt-4.8/qabstract...#setIndexWidget
borune
Цитата(lanz @ 3.2.2015, 10:32) *
Но вообще мне кажется проще через
http://qt-project.org/doc/qt-4.8/qabstract...#setIndexWidget


либо я что-то не так делаю, либо одно из двух. Пишу так:
QTableWidget *table = new QTableWidget;
...
connect(table,SIGNAL(cellClicked(int,int)),SLOT(cell_clicked(int,int)));
...
QPushButton *btnStopGo = new QPushButton(tr("Старт"))
table->setIndexWidget(table->model()->index(iter,10),btnStopGo);


При нажатии на кнопку я не попадаю в слот cell_clicked. То есть, по крайней мере, если судить по реакции на нажатие, методы setCellWidget и setIndexWidget ведут себя вроде бы одинаково.
lanz
Делайте коннект к сигналу кнопки.
Чтобы разобрать разные кнопки используйте QSignalMapper.

Либо если у вас новый компилятор:
connect(btnStopGo,&QPushButton::clicked,[](){cell_clicked(1,3);});

borune
Цитата(lanz @ 3.2.2015, 12:52) *
Делайте коннект к сигналу кнопки.

а как в обработчике клика по кнопке определить, в какой ячейке таблицы она находится?
lanz
btnStopGo->setProperty("MyAwesomeCellRow", 1);
btnStopGo->setProperty("MyAwesomeCellCol", 3);


И в получателе
obj->property("My...").toInt()



Либо как предлагали выше, отнаследовать свою кнопку.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.