Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Liername
1 / 1 / 0
Регистрация: 18.11.2013
Сообщений: 33
1

Некорректные сигналы QTableWidget

01.04.2014, 10:05. Просмотров 1093. Ответов 2
Метки нет (Все метки)

Всем привет. Замучился уже бороться с двумя криво работающими сигналами QTableWidget. Использую Qt 5.2.
На 98% уверен что это баг.

Задача проста: нужно отслеживать изменение текущей выделенной строки в QTableWidget.
Рассмотрим два способа сделать это:

1. Отслеживать сигнал itemSelectionChanged()
Не работает корректно. Если зажать левую кнопку мышки на текущей выделенной строке и перевести ее в зажатом состоянии в соседнюю сверху/снизу ячейку, то сигнал сработает, но сработает он ДО того, как изменится само значение текущей строки в самом объекте QTableWidget. Т.е. если мы воспользуемся в слоте функцией currentRow() то она вернет не ту строку, на которую мы перешли, а ту, в которой мы БЫЛИ.

2. Второй способ: сигнал currentCellChanged()
Работает прекрасно. Нет той проблемы, что в предыдущем примере, но тут другая проблема. Если удалить все строки из таблицы, то сигнал отправляется дважды: сначала строка равна -1, а затем, неожиданно, 0! Индекс текущей строки 0 в пустом столбце. Думаю, не нужно объяснять чем чревато для программы такое положение дел: возникает событие изменения текущей строки, и QTableWidget божится что текущая строка имеет индекс 0, и ее можно обработать... при том что строк у него нет вообще!

Собственно, вопрос: что мне делать? Неужели нет действительно нормального адекватно работающего способа отслеживать изменения текущей строки? Есть соображения сделать через currentCellChanged() с применением костылей, но хотелось бы как-нибудь по-нормальному + я все еще питаю надежду что все не так печально в Qt и я просто чего-то не понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2014, 10:05
Ответы с готовыми решениями:

QTableWidget/сигналы
пытаюсь отловить какая выделена строка делаю так connect(ui.TableWidget,...

Сигналы DoubleClicked() и флаг Qt::ItemIsSelectable для QTableWidget
Столкнулся с непонятным для себя поведением виджета при использовании флага...

Некорректные цвета в OpenGL
Здравствуйте! Задаю массив цветов для вершин void...

QTableWidget
При создании QTableWidget *tableWidget = new QTableWidget(3, 3, this); я...

QTableWidget
Почему у меня не работает программа? Она вроде запускается но ничего не...

2
Чистый
Автор FAQ
2713 / 1409 / 89
Регистрация: 08.09.2011
Сообщений: 3,741
Записей в блоге: 1
01.04.2014, 10:29 2
у меня небыло подобных проблем на 4.8
пробовали
C++ (Qt)
1
void QTableWidget::itemEntered ( QTableWidgetItem * item ) [signal]
?

я его юзал в совокупности с itemSelectionChanged
0
Liername
1 / 1 / 0
Регистрация: 18.11.2013
Сообщений: 33
01.04.2014, 10:46  [ТС] 3
Пробовал, но так даже хуже. Нет никакой реакции на клик левой кнопкой мышки. Я так понял, что этот сигнал отправляется при входе в ячейку на редактирование.

P.S. У меня отключены все EditTrigger

Добавлено через 4 минуты
В общем, я тут через костыль уже заставил работать. У меня первый столбец в таблице скрыт, поэтому при очистке таблицы я в коде устанавливаю индекс (0, 0), а затем в обработчике проверяю, чтобы столбец не был нулевым, так как пользователь не может сам установить текущую ячейку для столбца равной 0.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2014, 10:46

QTableWidget
Здравствуйте! Создаю 21 колонку. ui->tableWidget->setColumnCount(21); ...

QTableWidget
Здравствуйте! Подскажите, пожалуйста, можно как-нибудь убрать HorizontalHeader...

QTableWidget
хочу подсчитать среднее значение в столбцах void MTable::averange() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru