crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> 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  


Цитата(Петр91 @ 20.12.2011, 17:24) *
Тема избитая на просторах интернета, но я так и не могу ее решить. Либо на форумах отправляют документацию читать либо советуют то что в конечном итоге не работает. Во общем задача такая. При редактировании какой либо ячейки, по итогу ввода, запускается проверка введенного текста. Как отследить изменение, и получить текст. Я пытался делать через 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 со свои слотом, а в слоте
item->text()
возвратит текст ячейки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
crashsp
  опции профиля:
сообщение 20.12.2011, 19:46
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 56
Регистрация: 23.10.2010
Пользователь №: 2144

Спасибо сказали: 8 раз(а)




Репутация:   546  


Цитата(ilyabvt @ 20.12.2011, 20:24) *
Цитата
Я пытался делать через void QTableWidget::itemChanged ( QTableWidgetItem * item ) и void QTableWidget::cellChanged ( int row, int column ) [signal] но что то не могу разобраться(

Соедините сигнал itemChanged со свои слотом, а в слоте
item->text()
возвратит текст ячейки.

Этот сигнал испускается когда данные уже изменились , я так думаю ему надо перед изменением сделать какие то махинации с поступившими данными(в первом посте : по итогу ввода, запускается проверка введенного текста)

Сообщение отредактировал 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  


Цитата(ilyabvt @ 20.12.2011, 21:01) *
Ну тогда переопределить 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 отображается пустая ячейка, почему??? Если создать новый итем все работает, но это получается на каждый элемент таблицы свой итем??
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 17.8.2022, 22:35