Форум программистов, компьютерный форум, киберфорум
Наши страницы

Qt

Войти
Регистрация
Восстановить пароль
 
Liername
1 / 1 / 0
Регистрация: 18.11.2013
Сообщений: 33
#1

Некорректные сигналы QTableWidget - C++ Qt

01.04.2014, 10:05. Просмотров 925. Ответов 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 (C++ Qt):

QTableWidget/сигналы - C++ Qt
пытаюсь отловить какая выделена строка делаю так connect(ui.TableWidget, SIGNAL(cellClicked(int row,int column)),...

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

Некорректные цвета в OpenGL - C++ Qt
Здравствуйте! Задаю массив цветов для вершин void glwindow::getColorArray(QByteArray &bd) //функция получения цветов для вершин. bd -...

QT 5.6 C++ QTableWidget - C++ Qt
Здравствуйте!!! Создал QTableWidget через дизайнер форм. Разобрался как получить значение ячейки. например по адресу 1 row 1 col;...

QTableWidget - C++ Qt
Создаю таблицу. И она размещается в углу.(см. вложение) QTableWidget *tableWidget = new QTableWidget(10,10, this); Как, собственно,...

QTableWidget - C++ Qt
Почему у меня не работает программа? Она вроде запускается но ничего не выводится. #include "mainwindow.h" #include <QVBoxLayout> ...

2
Чистый
Автор FAQ
2709 / 1405 / 73
Регистрация: 08.09.2011
Сообщений: 3,733
Записей в блоге: 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 - C++ Qt
Здравствуйте! Подскажите, пожалуйста, можно как-нибудь убрать HorizontalHeader и VeritcalHeader у объекта QTableWidget, чтобы одна сетка...

qtablewidget - C++ Qt
qtablewidget заполняется данными, можно ли сделать так что бы щелчек по ячейки вызывал функцию? и получать значение нажатой ячейки

QTableWidget - C++ Qt
Здравствуйте! Создаю 21 колонку. ui->tableWidget->setColumnCount(21); Теперь все заголовки столбцов имеют название от 1 до 21. ...

QTableWidget - C++ Qt
Есть стандартная таблица 3х3 , при выделение двух ячеек они обмениваются содержимым,таблицу построил, но вот слот не могу правильно...


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

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

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