QAbstarctTableModel, CheckBox в столбце.
QAbstractTableModel, qcheckbox
Доброго времени суток!
Отображение CheckBox Получилось организовать. Правда возник вопрос чтобы в ячейке отображался только он и по центру.
Но вот никак не пойму как сделать что бы выбирался Сheckboх.
Cовсем что-то запутался или где-то что-то не дочитал.
Буду благодарен за любой пинок в нужном направлении....
modelterminals.h
- #ifndef MODELTERMINALS_H
- #define MODELTERMINALS_H
- #include "FuelNameWizard/terminals.h"
- #include <QObject>
- #include <QAbstractTableModel>
- class ModelTerminals : public QAbstractTableModel
- {
- Q_OBJECT
- QVector<Terminals> term;
- public:
- ModelTerminals(const QVector<Terminals> vek);
- // QAbstractItemModel interface
- public:
- int rowCount(const QModelIndex &parent) const;
- int columnCount(const QModelIndex &parent) const;
- QVariant data(const QModelIndex &index, int role) const;
- QVariant headerData(int section, Qt::Orientation orientation, int role) const;
- // QAbstractItemModel interface
- public:
- Qt::ItemFlags flags(const QModelIndex &index) const;
- // QAbstractItemModel interface
- public:
- bool setData(const QModelIndex &index, const QVariant &value, int role);
- };
- #endif // MODELTERMINALS_H
modelterminals.cpp
- #include "modelterminals.h"
- ModelTerminals::ModelTerminals(const QVector<Terminals> vek)
- {
- term = vek;
- }
- int ModelTerminals::rowCount(const QModelIndex &parent) const
- {
- return term.size();
- }
- int ModelTerminals::columnCount(const QModelIndex &parent) const
- {
- Terminals *terminal = new Terminals();
- return terminal->colParam();
- }
- QVariant ModelTerminals::data(const QModelIndex &index, int role) const
- {
- if ( !index.isValid() ) { return QVariant(); }
- Terminals t = term[index.row()];
- switch (role) {
- case Qt::DisplayRole:
- switch (index.column()) {
- case 0: return t.isCheked();
- case 1: return t.terminal();
- case 2: return t.name();
- case 3: return t.serverName();
- case 4: return t.database();
- case 5: return t.password();
- default: break;
- }
- break;
- case Qt::CheckStateRole:
- if(index.column() == 0)
- return (t.isCheked() != 0) ? Qt::Checked : Qt::Unchecked;
- break;
- default:
- break;
- }
- return QVariant();
- }
- QVariant ModelTerminals::headerData(int section, Qt::Orientation orientation, int role) const
- {
- //Cоздаем заголовки столбцов модели
- if( role != Qt::DisplayRole ) {
- return QVariant();
- }
- if( orientation == Qt::Vertical ) {
- return section;
- }
- switch( section ) {
- case 0:
- return tr( "" );
- case 1:
- return tr( "АЗС" );
- case 2:
- return tr( "Адрес" );
- case 3:
- return tr( "Сервер" );
- case 4:
- return tr( "Файл БД" );
- case 5:
- return tr( "Пароль" );
- }
- return QVariant();
- }
- Qt::ItemFlags ModelTerminals::flags(const QModelIndex &index) const
- {
- Qt::ItemFlags flags = QAbstractTableModel::flags(index);
- if (index.column() == 0)
- {
- flags |= Qt::ItemIsUserCheckable;
- flags |= Qt::ItemIsSelectable;
- }
- else
- {
- flags |= Qt::ItemIsEditable;
- flags |= Qt::ItemIsSelectable;
- }
- return flags;
- }
- bool ModelTerminals::setData(const QModelIndex &index, const QVariant &value, int role)
- {
- Terminals t = term[index.row()];
- if(!index.isValid())
- return false;
- if(role == Qt::CheckStateRole)
- {
- if(value.toInt() == Qt::Checked)
- {
- t.setIsCheked(1);
- return true;
- }
- else
- {
- t.setIsCheked(0);
- return true;
- }
- }
- return false;
- }
Код заполнения модели данными
- Terminals tr;
- QSqlDatabase db = QSqlDatabase::database();
- QSqlQuery q = QSqlQuery(db);
- QString strSQL = "SELECT DISTINCT t.terminal_id, TRIM(t.name), c.SERVER_NAME, c.DB_NAME, c.CON_PASSWORD FROM TERMINALS t "
- "LEFT JOIN CONNECTIONS c ON t.TERMINAL_ID = c.TERMINAL_ID "
- "LEFT JOIN SHIFTS s ON s.TERMINAL_ID = t.TERMINAL_ID "
- "WHERE t.TERMINALTYPE=3 and s.SHIFT_ID>0 "
- "ORDER BY t.TERMINAL_ID";
- if(!q.exec(strSQL)) {
- qInfo(logInfo()) << Q_FUNC_INFO << "Ошибка получения списка терминалов." << q.lastError().text();
- return;
- }
- while (q.next()){
- tr.setIsCheked(0);
- tr.setTerminal(q.value(0).toInt());
- tr.setName(q.value(1).toString());
- tr.setServerName(q.value(2).toString());
- tr.setDatabase(q.value(3).toString());
- tr.setPassword(passConv(q.value(4).toString()));
- terminals.append(tr);
- }
- modelTerminals = new ModelTerminals(terminals);
- ui->tableViewTerminals->setModel(modelTerminals);
2
252
Вам это нравится? Поделитесь в социальных сетях!
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Пожалуйста, авторизуйтесь или зарегистрируйтесь
- Последние комментарии
- AK1 апреля 2025 г. 11:41Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VP9 марта 2025 г. 16:14Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМ22 ноября 2024 г. 21:51Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Сейчас обсуждают на форуме
- f15 февраля 2025 г. 13:46Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
Добрый день, Руслан
Гляньте, пожалуйста, вот этот топик - QSqlTableModel + QTableView + кастомный делегат в виде чекбокса
Вам нужно добавить делегат, поэтому думаю, что это то, что вам нужно.
Спасибо, это я уже понял.
Только нигде не найду законченого примера. :-)
Куски кода которые не могу свести воедино.