Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: dr_Begemot от Июнь 22, 2009, 15:46



Название: Событие на изменение содержимого ячейки у QTableWidget
Отправлено: dr_Begemot от Июнь 22, 2009, 15:46
У QTableWidget есть сигнал cellChanged, но он мне не подходит т.к. он срабатывает во всех случаях, мне же нужен такой сигнал, который бы срабатывал только при изменениях в форме.

Например в случае если:
QTableWidgetItem* item = view()->tablePlace->item(row, 0);
item->setText( "abcd" );

то сигнгал не должен генерироваться...


Название: Re: Событие на изменение содержимого ячейки у QTableWidget
Отправлено: mugabe от Июнь 22, 2009, 16:12
А когда должен генерироваться? Не совсем понятно.

Подозреваю, что тебе нужно ловить сигналы от делегата.


Название: Re: Событие на изменение содержимого ячейки у QTableWidget
Отправлено: dr_Begemot от Июнь 22, 2009, 16:14
А когда должен генерироваться? Не совсем понятно.

Подозреваю, что тебе нужно ловить сигналы от делегата.

Ну нужно чтобы генерился только при изменениях пользователем, а когда в программе setText вызывается этот сигнал бы не срабатывал.


Название: Re: Событие на изменение содержимого ячейки у QTableWidget
Отправлено: mugabe от Июнь 22, 2009, 16:20
В общем должно помочь что-то вроде.

connect(view()->itemDelegate(), SIGNAL(commitData(QWidget*)), this, SLOT(commitData(QWidget*)));

Писал "на глаз", работоспособность не проверял :)


Название: Re: Событие на изменение содержимого ячейки у QTableWidget
Отправлено: spectre71 от Июнь 22, 2009, 17:45
Например в случае если:
QTableWidgetItem* item = view()->tablePlace->item(row, 0);
item->setText( "abcd" );
то сигнгал не должен генерироваться...

Можешь сделать так:
mySetText("abcd");
Код
C++ (Qt)
void mySetText(const QString& text) {
 bool IsBlocked = view()->blockSignals(true);
 QTableWidgetItem* item = view()->tablePlace->item(row, 0);
 item->setText( text );
 view()->blockSignals(IsBlocked);
}