QTableWidget отслеживание изменений |
Здравствуйте, гость ( Вход | Регистрация )
QTableWidget отслеживание изменений |
Петр91 |
20.12.2011, 16:24
Сообщение
#1
|
Студент Группа: Участник Сообщений: 19 Регистрация: 10.6.2011 Пользователь №: 2731 Спасибо сказали: 0 раз(а) Репутация: 0 |
Тема избитая на просторах интернета, но я так и не могу ее решить. Либо на форумах отправляют документацию читать либо советуют то что в конечном итоге не работает. Во общем задача такая. При редактировании какой либо ячейки, по итогу ввода, запускается проверка введенного текста. Как отследить изменение, и получить текст. Я пытался делать через void QTableWidget::itemChanged ( QTableWidgetItem * item ) и void QTableWidget::cellChanged ( int row, int column ) [signal] но что то не могу разобраться(
|
|
|
crashsp |
20.12.2011, 18:20
Сообщение
#2
|
Студент Группа: Участник Сообщений: 56 Регистрация: 23.10.2010 Пользователь №: 2144 Спасибо сказали: 8 раз(а) Репутация: 546 |
Тема избитая на просторах интернета, но я так и не могу ее решить. Либо на форумах отправляют документацию читать либо советуют то что в конечном итоге не работает. Во общем задача такая. При редактировании какой либо ячейки, по итогу ввода, запускается проверка введенного текста. Как отследить изменение, и получить текст. Я пытался делать через void QTableWidget::itemChanged ( QTableWidgetItem * item ) и void QTableWidget::cellChanged ( int row, int column ) [signal] но что то не могу разобраться( Самый простой способ это почитать про модель и представление, если плохо с документацией поищи любую книгу по Qt и там смотри главу "Модель и представление" , боюсь тут пару словами не обойтись, поэтому и отправляют читать. Вот мини пример , на примере QStandardItemModel + QTableView. Сообщение отредактировал crashsp - 20.12.2011, 20:16 |
|
|
ilyabvt |
20.12.2011, 19:24
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
Цитата Я пытался делать через void QTableWidget::itemChanged ( QTableWidgetItem * item ) и void QTableWidget::cellChanged ( int row, int column ) [signal] но что то не могу разобраться( Соедините сигнал itemChanged со свои слотом, а в слоте возвратит текст ячейки.
|
|
|
crashsp |
20.12.2011, 19:46
Сообщение
#4
|
Студент Группа: Участник Сообщений: 56 Регистрация: 23.10.2010 Пользователь №: 2144 Спасибо сказали: 8 раз(а) Репутация: 546 |
Цитата Я пытался делать через void QTableWidget::itemChanged ( QTableWidgetItem * item ) и void QTableWidget::cellChanged ( int row, int column ) [signal] но что то не могу разобраться( Соедините сигнал itemChanged со свои слотом, а в слоте возвратит текст ячейки.Этот сигнал испускается когда данные уже изменились , я так думаю ему надо перед изменением сделать какие то махинации с поступившими данными(в первом посте : по итогу ввода, запускается проверка введенного текста) Сообщение отредактировал crashsp - 20.12.2011, 19:49 |
|
|
ilyabvt |
20.12.2011, 21:01
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
Ну тогда переопределить keyPressEvent или поставить фильтр событий. Итогом ввода можно считать например нажатие клавиши Enter или сигнал itemSelectionChanged. Текст полученный в обработчике keyPressEvent сохранять в отдельной переменной, а по окончанию ввода (см. выше) проверять полученную строку.
Сообщение отредактировал ilyabvt - 20.12.2011, 21:02 |
|
|
crashsp |
20.12.2011, 21:05
Сообщение
#6
|
Студент Группа: Участник Сообщений: 56 Регистрация: 23.10.2010 Пользователь №: 2144 Спасибо сказали: 8 раз(а) Репутация: 546 |
Ну тогда переопределить keyPressEvent или поставить фильтр событий. Итогом ввода можно считать например нажатие клавиши Enter или сигнал itemSelectionChanged. Текст полученный в обработчике keyPressEvent сохранять в отдельной переменной, а по окончанию ввода (см. выше) проверять полученную строку. Зачем морочить ? если есть уже все готовое просто бери и используй , я про модель и представление... |
|
|
Петр91 |
21.12.2011, 4:15
Сообщение
#7
|
Студент Группа: Участник Сообщений: 19 Регистрация: 10.6.2011 Пользователь №: 2731 Спасибо сказали: 0 раз(а) Репутация: 0 |
Пришлось отказаться от tablewidget и перейти на tableview. Я как раз лабу и делаю про mvс. Создал модель, передаю ее в tableview. В первом столбце char в другом допустим int. Вот мне необходимо отслеживать. + сама программа может изменить. Да мне хотя бы самый минимум сделать. Необязательно хранить старое значение, если не корректно введены данные, то не выходить из редактирования элемента. Сейчас разберусь с мвц, и пример гляну.
|
|
|
Петр91 |
25.12.2011, 12:15
Сообщение
#8
|
Студент Группа: Участник Сообщений: 19 Регистрация: 10.6.2011 Пользователь №: 2731 Спасибо сказали: 0 раз(а) Репутация: 0 |
Спасибо за ценный пример, толко я не пойму как вы создаете модель. Какой класс у вас родительским является. Я читаю книжку Макса Шлее, я создавал модель выбирая в качестве родительского класса, класс QStringListModel а у вас как?
|
|
|
Петр91 |
26.12.2011, 2:13
Сообщение
#9
|
Студент Группа: Участник Сообщений: 19 Регистрация: 10.6.2011 Пользователь №: 2731 Спасибо сказали: 0 раз(а) Репутация: 0 |
А, все. Не заметил класс) Разобрался, спасибо!
|
|
|
Петр91 |
26.12.2011, 4:29
Сообщение
#10
|
Студент Группа: Участник Сообщений: 19 Регистрация: 10.6.2011 Пользователь №: 2731 Спасибо сказали: 0 раз(а) Репутация: 0 |
Извините за флуд, ни как не могу лабу доделать. Вот я создаю:
QList<QStandardItem *> column1; QStandardItem *item = new QStandardItem(); item->setData("текст", Qt::DisplayRole); column1.append(item); Все работает. Но когда я хочу сделать так, что бы лист содержал два итема и пишу QStandardItem *item = new QStandardItem(); item->setData("текст", Qt::DisplayRole); column1.append(item); item->setData("текст2", Qt::DisplayRole); column1.append(item); Вместо текст2 отображается пустая ячейка, почему??? Если создать новый итем все работает, но это получается на каждый элемент таблицы свой итем?? |
|
|
Текстовая версия | Сейчас: 25.11.2024, 17:44 |