Russian Qt Forum
Октябрь 01, 2024, 04:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidget + QLineEdit  (Прочитано 5094 раз)
once_again_abc
Гость
« : Апрель 16, 2012, 11:56 »

не работает.

Создаю QTableWidget, в несколько ячеек помещаю QLineEdit-ы.
Пытаюсь отловить сигнал об изменении данных в QLineEdit-ах через cellChanged и itemChanged - оба сигнала регистрируются, но сами сигналы не приходят.
В чем может быть дело и как получить номер строки/столбца элемента, в котором произошли изменения?
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #1 : Апрель 16, 2012, 13:34 »

когда создаешь QLineEdit'ы записывай в них самих номера строки/столбца, сигнал регестрируй на сам QLineEdit, и работай уже с сохраненными значениями row/column.

Код
C++ (Qt)
   for (int i=0; i < 10; ++i)
   {
       QLineEdit *le = new QLineEdit(this);
       le->setProperty("row", i);
       le->setProperty("column", 0);
       tableWidget->setCellWidget(i, 0, le);
       connect(le, SIGNAL(textChanged(QString)), this, SLOT(onTextChanged));
       le = new QLineEdit(this);
       le->setProperty("row", i);
       le->setProperty("column", 1);
       tableWidget->setCellWidget(i, 1, le);
       connect(le, SIGNAL(textChanged(QString)), this, SLOT(onTextChanged));
   }
в обработчике:

Код
C++ (Qt)
   QLineEdit *le = qobject_cast<QLineEdit*>(sender());
   if (!le)
       return;
   int row = le->property("row").toInt();
   int column = le->property("column");
   // ...
но по хорошему вместо setCellWidget лучше использовать делегат, тогда все родные сигналы QTableWidget будут испускаться.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #2 : Апрель 16, 2012, 15:17 »

а чем собственно не устраивают встроенные в ячейку QLineEdit'ы?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #3 : Апрель 16, 2012, 15:24 »

а чем собственно не устраивают встроенные в ячейку QLineEdit'ы?
они не влияют на данные, адресованые Qt::DisplayRole, следовательно стандартными средствами не отследить изменение значения в ячейках QTableWidget'а.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
once_again_abc
Гость
« Ответ #4 : Апрель 17, 2012, 01:17 »

а чем собственно не устраивают встроенные в ячейку QLineEdit'ы?
они не влияют на данные, адресованые Qt::DisplayRole, следовательно стандартными средствами не отследить изменение значения в ячейках QTableWidget'а.

спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.106 секунд. Запросов: 23.