Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
14 / 14 / 1
Регистрация: 14.03.2015
Сообщений: 113
1

QTableView. Как отловить изменение данных

26.03.2017, 17:04. Показов 9297. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Вопрос: как отловить изменение данных в ячейке?

Вот такой коннект получился, но это немного не то:
C++ (Qt)
1
connect(ui->tableView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(test_slot(QModelIndex,QModelIndex)), Qt::DirectConnection);
Не нашел нужный сигнал. Плохо смотрел или его вообще нет?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2017, 17:04
Ответы с готовыми решениями:

Как можно изменить базу данных с QTableView?
Привет опять С базой соеденения есть Вывожу в QTableView таблицу Как изменить в базе чтото,...

Конвертация и изменение в QTableView + SQL
Всем привет! Очень нужен Ваш совет. Есть БД, где в одной колонке записаны коды в виде: 10,...

Изменение внешнего вида строк в QTableView
Доброго времени суток! Есть небольшое приложение, в котором из таблицы MySQL через...

Изменение цвета ячейки в QTableView когда меняется значение QCheckBox
Доброго времени суток. Имеется QTableView с моделью QStandardItemModel. Задача такая, на некоторых...

7
7794 / 6560 / 2985
Регистрация: 14.04.2014
Сообщений: 28,676
26.03.2017, 17:45 2
Лучший ответ Сообщение было отмечено Wyn как решение

Решение

Смотри сигнал dataChanged() у модели, а не у QTableView.
1
14 / 14 / 1
Регистрация: 14.03.2015
Сообщений: 113
26.03.2017, 18:39  [ТС] 3
модель... я наверное не совсем понимаю как с ней работать вообще. Чтобы вывести данные, я должен модель создавать таким образом?
C++ (Qt)
1
*model = new QStandardItemModel(row_count, col_count, this);
после чего задавать модель:
C++ (Qt)
1
ui->tableView->setModel(model);
То есть постоянно указывать размеры. Или можно как-то иначе?
p.s. вопрос возможно не совсем по теме, но хотелось бы узнать.

Добавлено через 30 минут
слишком долго до меня доходило. Вот так:
C++ (Qt)
1
connect(ui->tableView->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)), this, SLOT(test_slot(QModelIndex,QModelIndex,QVector<int>)), Qt::DirectConnection);
Спасибо.
0
7794 / 6560 / 2985
Регистрация: 14.04.2014
Сообщений: 28,676
27.03.2017, 08:52 4
Какие размеры? Если есть QTableView, то есть и модель - без неё не работает.
0
14 / 14 / 1
Регистрация: 14.03.2015
Сообщений: 113
27.03.2017, 17:56  [ТС] 5
Именно с размером и проблема. Я каждый раз, после отрабатывания функции добавления/удаления строки, перерисовываю таблицу. Создаю заново модель. Можно ли создать модель только один раз и менять в ней размеры? Например менять количество строк таблицы.
0
184 / 176 / 57
Регистрация: 25.09.2014
Сообщений: 828
27.03.2017, 18:13 6
Модель - это просто класс, который работает с данными. И все. Если данные это лист, то запрос строк у модели, может, например, вернуть количество элементов листа. А запрос количества столбцов вернет 1.
А вьюшка - это визуальное представление данных модели для пользователя.

Как ты что-то делаешь - нам пока не интересно. Расскажи, ЧТО ты пытаешься сделать. С этого надо начинать.
Вьюшка сама себя перерисовывает, если в функции setData модели ты правильно и своевременно вызываешь сигнал dataChanged, как того требует документация. Если же модель стандартная, то я пока не понимаю, откуда проблемы.
0
14 / 14 / 1
Регистрация: 14.03.2015
Сообщений: 113
27.03.2017, 18:42  [ТС] 7
Нет проблемы из категории "что-то не работает". Просто каждый раз при добавлении/удалении данных из таблицы я выполняю следующее:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
QStandardItemModel *model = new QStandardItemModel(hash.size(), 4, this);
    ui->tableView->setModel(model);
    vector<QVariant> vect;
    int row = 0;
    std::vector<int>::iterator i = temp_keys.begin();
    students student;
    while (i != temp_keys.end()) {
        student = hash.value(*i);
        vect.push_back(student.get_name());
        vect.push_back(student.get_age());
        vect.push_back(student.get_group());
        vect.push_back(student.is_expelled());
        for (int col = 0; col < 4; col ++)
            model->setData(model->index(row,col),vect[col]);
        vect.clear();
        i++; row++;
    }
Вопрос в следующем: действительно ли мне каждый раз нужно создавать модель, присваивать ее таблице или же можно это сделать единожды и просто менять количество строк?
0
7794 / 6560 / 2985
Регистрация: 14.04.2014
Сообщений: 28,676
28.03.2017, 19:26 8
Ты должен работать с моделью, а QTableView автоматически отреагирует, как писали выше. Создавать модель каждый раз не нужно.
0
28.03.2017, 19:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2017, 19:26
Помогаю со студенческими работами здесь

Валидация данных в QTableView
Нужно провести валидацию данных в таблице, а именно проверить что б введеные данные являлись...

Обновление данных в QTableView
Всем привет. У меня есть QStandardItemModel, в котором у меня хранятся строки. Также есть...

Редактирование данных в QTableView
Сабж. Есть своя модель наследуемая от QAbstractTableModel. Переопределены ф-ии data, setData....

Размер таблицы данных в QTableView
Собственно есть таблица данных и класс QTableView который её представляет. Но мне не понятен такой...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru