QTableWidget :: setCellWidget () отключает сигналы от QTableWidget?

У меня есть экземпляр QTableWidget с его сигналом cellEntered (int, int), связанным со слотом X (который выделяет строку, в которой содержится ячейка). Также у меня есть один столбец, содержащий флажки.

Проблема заключается в добавлении флажков к ячейкам таблицы с помощью метода QTableWidget :: setCellWidget ():

QTableWidgetItem *checkBoxItem = new QTableWidgetItem("");
ui->tableWidget->setItem(rowCount, column, checkBoxItem);
QCheckBox* checkBox = new QCheckBox();
ui->tableWidget->setCellWidget(rowCount, column, checkBox);
connect(checkBox, SIGNAL(clicked(bool)),
    this, SLOT(checkbox_clicked(bool)));

заставляет слот X не вызываться, когда курсор находится над ячейкой в ​​этом столбце.

Проблема характерна не только для флажков, но и для других типов виджетов.

Я читал кое-что о классе SignalMapper в некоторых сообщениях, но этот класс кажется полезным для сопоставления сигнала от виджета к слоту. Вместо этого моя проблема связана с сигналом из таблицы.

Любое предложение?

Ваше здоровье,

Пабло


person pabloderosario    schedule 18.04.2013    source источник


Ответы (1)


Почему бы вам не использовать QTableWidgetItem и не установить для него возможность проверки с помощью QTableWidgetItem :: setCheckState (состояние Qt :: CheckState)?

QTableWidgetItem *check_item = new QTableWidgetItem;
check_item->setCheckState(Qt::Unchecked);

Вы также можете сделать это с помощью флагов.

check_item->setFlags(Qt::ItemIsUserCheckable);

Подключите сигнал QTableWidget :: itemChanged (QTableWidgetItem * item) к слот и проверьте, отмечен ли там элемент.

person thuga    schedule 19.04.2013
comment
Да, я рассматривал эту альтернативу, потому что она позволяет мне обрабатывать все сигналы от QTableWidget, что необходимо для выделения строк. В любом случае, я задал этот вопрос, потому что: 1) Я не могу понять тот общий факт, что вставка ЛЮБОГО виджета в ячейку затрудняет обработку сигналов от QTableWidget. 2) Использование состояния проверки ячейки кажется недостаточно гибким для работы с положением и стилем флажка, как если бы я использовал QCheckBox. Спасибо за ответ, thuga! - person pabloderosario; 19.04.2013