Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
23 / 21 / 2
Регистрация: 04.09.2019
Сообщений: 425

Подключение checkbox к PostgreSQL таблице

03.08.2022, 18:03. Показов 4654. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Кто-нибудь из вас сталкивался со связкой checkbox и значениями БД?
У меня имеется таблица в БД(см. фото). Необходимо создать таблицу, где будет выводится под столбцами insert, delete, update - checkboxы. При включении чекбокса - в бд должно занестись значение 1, выключение - 0. Значений может быть много.
Миниатюры
Подключение checkbox к PostgreSQL таблице  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.08.2022, 18:03
Ответы с готовыми решениями:

PostgreSQL: Можно ли записать значение CheckBox в таблицу БД
Есть web-приложение с БД на PostgreSQL. Можно ли записать значение CheckBox в таблицу БД. Таблица следующая: users (колонки name, password,...

Редактирование записи в таблице postgresql
Добрый день , код чужой с некоторой моей редакцией - учусь. Хочу отредактировать запись в таблице через форму tkinter ...

PostgreSQL, ошибка подключения к таблице
Здравствуйте, у меня возникла такая проблема. На сервере PostgreSQL 9.3 создана база данных, в ней 5 таблиц. При попытке отображения данных...

57
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
05.08.2022, 21:29
Студворк — интернет-сервис помощи студентам
Ender Che, я про то, что классы с приставкой View (ListView, TableView,...) это модель-представление (mvc),
а с приставкой Widget (TableWidget,...) item-based c предустановленной моделью

Добавлено через 2 минуты
Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
в QTableWidget можно напрямую присваивать модель
нет, нельзя
1
23 / 21 / 2
Регистрация: 04.09.2019
Сообщений: 425
05.08.2022, 21:52  [ТС]
Поэтому и спросил. Ибо, когда я реализовывал через тейблвиджет - такого не нашел.

Добавлено через 4 минуты
Цитата Сообщение от sdf45 Посмотреть сообщение
что бы велосипед не изобретали, как я
По этому поводу и спрашивал. Как этот "велосипед" завести в cpp файле(код), чтобы оцентровывалось, ибо буду честен, с делегатами у меня проблемы.

Добавлено через 1 минуту
Цитата Сообщение от Ender Che Посмотреть сообщение
натравливать таблицу для вывода
C++
1
2
3
4
QSqlTableModel model;
     model.setTable("test");
     model.select();
     tableView->setModel(&model);
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
05.08.2022, 21:58
Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
завести в cpp файле(код)
я даже хз...
когда наполняете модель, можно задать
QStandardItem *item= new QStandardItem();
item->setTextAlignment(Qt::AlignCenter);
model->setItem(row,col,item);

а так то помоему, в кастомной модели вернуть нужную роль.

Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
с делегатами у меня проблемы.
какого рода? не работает мой код? у меня вродь работает... (выравнивание)
1
23 / 21 / 2
Регистрация: 04.09.2019
Сообщений: 425
05.08.2022, 22:02  [ТС]
Код на вашей основе-то работает, я его и использую. Но, я не использовал функции, которые Вы скинули выше(для выравнивания), потому что не знаю, как их вызвать, и какие параметры передать правильно.
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
05.08.2022, 22:25
Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
как их вызвать
так не надл их вызывать, просто добавьте...
updateEditorGeometry() уже есть, просто допишите
и добавьте paint()
1
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
05.08.2022, 22:31
1
 Аватар для Ender Che
521 / 411 / 77
Регистрация: 29.05.2018
Сообщений: 1,362
06.08.2022, 10:18
Цитата Сообщение от sdf45 Посмотреть сообщение
Сообщение от Pandaprogrammer Посмотреть сообщение
в QTableWidget можно напрямую присваивать модель
нет, нельзя
В том-то и дело, что можно. Смотрим в хэлпе List of All Members for QTableWidget, и видим
setModel(QAbstractItemModel *)
1
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
06.08.2022, 12:22
Цитата Сообщение от Ender Che Посмотреть сообщение
В том-то и дело, что можно. Смотрим в хэлпе List of All Members for QTableWidget, и видим
setModel(QAbstractItemModel *)
Оказывается, да... только через базовый класс, а если напрямую- то нет.

QTableWidget *table=new QTableWidget;
QStandardItemModel *model=new QStandardItemModel;

теперь если попробуем:
table->setModel(model);
получим сообщение, что метод setModel() является приватным.

а если так:
table->QTableView::setModel(model);
то все получилось... Если честно-открытие для меня, узнал нечто новое

Однако, если мы так поставим модель-при попытке использования стандартного функционала QTableWidget получаем краш.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
auto table=new QTableWidget;
    table->setRowCount(10);
    table->setColumnCount(10);
    table->show();
 
   //либо работаем с моделью
    auto model=new QStandardItemModel;
    table->QTableView::setModel(model);
 
    QList<QStandardItem*>row;
    for(int i=0; i<5; ++i)
        row<<new QStandardItem(QString("item %1").arg(i));
    model->appendRow(row);
 
    //либо используем item-based функционал
    table->setItem(3,0, new QTableWidgetItem("item"));
 
   //а иначе-вылет
Ender Che, вывод у меня получился такой: поставить модель на QTableWidget можно, но функционал item-based при этом теряется, можем работать с таблицей только через модель, по сути-TableWidget превращается в TableView.

Если у Вас получалось совмещать установку модели в QTableWidget и его стандартный функционал - поделитесь, пожалуйста, хотел бы я посмотреть, так как у меня программа крашится при этом.
0
23 / 21 / 2
Регистрация: 04.09.2019
Сообщений: 425
06.08.2022, 12:56  [ТС]
Цитата Сообщение от sdf45 Посмотреть сообщение
>subElementRect(QStyle::SE_ViewItemCheck Indicator
Пофиксил. Удивительно, но Qt 6 не хотел видеть SE_ViewItemCheckIndicator. Заменил его на другое, и всё заработало, спасибо

Добавлено через 1 минуту
Но отрисовывать rect для скрытия текста, ахах. Это гениально. Я бы и не додумался так скостылить

Добавлено через 3 минуты
Если я правильно всё понял, конечно. paint ведь как раз и делает это. Но, кстати говоря, про создание функций, которые сами срабатывают без вызова из в cpp - никогда такое не создавал, и не знал, что так можно вообще
0
 Аватар для Ender Che
521 / 411 / 77
Регистрация: 29.05.2018
Сообщений: 1,362
06.08.2022, 13:44
Цитата Сообщение от sdf45 Посмотреть сообщение
Если у Вас получалось совмещать установку модели в QTableWidget и его стандартный функционал
Не, не пробовал. Мне QTableView сразу приглянулся, и на QTableWidget я не смотрел внимательно. Просто по теме топика вброс сделал.
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
06.08.2022, 13:49
Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
Qt 6 не хотел видеть
- возможно, у меня Qt5+

Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
отрисовывать rect для скрытия текста
- только по идее надо бы взять цвет заливки для него из палитры, иначе при изменении стиля я хз какой будет результат.

Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
про создание функций, которые сами срабатывают без вызова из в cpp
- они не создаются, а переопредиляются (override)
- а в данном случае - делегат - вызывает их в определенных ситуациях.
(такой подход встречается очень часто-когда делаем сабкласс, -посмотрите инфу по абстрактным(виртуальным) классам и наследовании от них, с переопределением методов)
0
23 / 21 / 2
Регистрация: 04.09.2019
Сообщений: 425
06.08.2022, 13:51  [ТС]
а ведь конструкция сигналов/слотов работают по аналогии? Они так же срабатывают при тех или иных условиях? (Например, кнопка нажата, текст скрыт)

Добавлено через 13 секунд
Спасибо, почитаю
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
06.08.2022, 16:00
Цитата Сообщение от Ender Che Посмотреть сообщение
на QTableWidget я не смотрел внимательно
я видел и раньше setModel() у него, удивился, попробовал поставить, получил сообщение про приватный метод, и забил.
Цитата Сообщение от Ender Che Посмотреть сообщение
вброс сделал.
и я Вам благодарен, подумалось поставить модель через базовый класс, и я подофигел слегка из-за того, что получилось

Добавлено через 20 минут
Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
а ведь конструкция сигналов/слотов работают по аналогии?
ммм, как сказать... и да, и нет.

Кликните здесь для просмотра всего текста
У кнопки например, есть заранее предустановленный, так сказать, сигнал clicked- он вызывается, когда кнопка нажата.
Такое поведение реализовано в классе этой кнопки, мы берем и пользуемся.

Но если пишем свою кнопку, и определяем для нее какие-то свои сигналы, то мы должны сами вызывать их в нужных ситуациях, тоесть если Вы просто добавите сигнал в класс, сам он не сработает, пока не вызовем его с помощью emit.

В абстрактных классах определены виртуальные методы, например если посмотрите в доке описание QStyledItemDelegate:
C++ (Qt)
1
2
3
4
5
6
virtual QWidget *   createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
virtual void    paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
virtual void    setEditorData(QWidget *editor, const QModelIndex &index) const override
virtual void    setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
virtual QSize   sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
virtual void    updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override
Механика вызовов этих методов скрыта в классе QStyledItemDelegate.
Мы создаем дочерний класс от QStyledItemDelegate и переопределяем эти методы (которые virtual)
При этом нам не надо заботится, когда вызывать их и с какими параметрами, все это берет на себя базовый класс QStyledItemDelegate.
А мы лишь задаем поведение обьектов дочернего класса при, в данном случае, создания редактора в ячейке, или изменения его размеров при ресайзе, и т.д.


Добавлено через 1 час 41 минуту
все таки вот более правильный паинт:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void checkboxDelegate::paint(QPainter *painter,
                             const QStyleOptionViewItem &option,
                             const QModelIndex &index) const
{
   // QStyledItemDelegate::  paint(painter, option, index);   
 
    QBrush background=option.palette.background();
    painter->save();
    painter->setPen(background.color());
    painter->setBrush(background);
    painter->drawRect(option.rect);
    painter->restore();
}
и кстати, я не закрываю текст прямоугольником, я его просто не отрисовываю, закомментировав строчку:
QStyledItemDelegate:: paint(painter, option, index);
это вызов отрисовки базового класса который и рисует текст
0
23 / 21 / 2
Регистрация: 04.09.2019
Сообщений: 425
09.08.2022, 16:59  [ТС]
Вопрос не по теме, чисто ради интереса. А можно ли вообще QTableModel *table1 задать setQuery, тем самым поменять наименование столбцов запросов(это делается засчет: SELECT name AS "Имя" FROM Table"). Сегодня пробовал, но, не хочет так.
Или есть ещё какие-то методы переименовывания столбцов? Знаю только этот один, и то я его использовал в QQueryModel. Но, в моем случае, как я понимаю, он не подходит, ибо не получится задать setStrategy() для того, чтобы данные с чекбоксов записывались в бд
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
09.08.2022, 17:55
Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
А можно ли вообще QTableModel *table1 задать setQuery, тем самым поменять наименование столбцов запросов
Pandaprogrammer, сорри, я не улавливаю сути вопроса... Поменять местами столбцы в таблице? в БД?

Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
SELECT name AS "Имя" FROM Table"
вроде как временно присваивает новое имя полю из БД, но в самой БД ничего не меняет
0
23 / 21 / 2
Регистрация: 04.09.2019
Сообщений: 425
09.08.2022, 18:06  [ТС]
Если брать данные из таблицы сразу (методом setTable - то отображаются названия колонок из БД). Можно их как-то переименовать?
0
Покинул чат.
1133 / 728 / 195
Регистрация: 30.03.2021
Сообщений: 2,379
09.08.2022, 18:15
Цитата Сообщение от Pandaprogrammer Посмотреть сообщение
Можно их как-то переименовать?
попробуйте model->setHeaderData();
1
23 / 21 / 2
Регистрация: 04.09.2019
Сообщений: 425
09.08.2022, 19:56  [ТС]
Получилось, спасибо.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2022, 19:56

Подключение PostgreSQL к QT
Подскажите как с нуля посгрю к кьют подключить, или ссылочек на инфу, на просторах сети не чего путного не нашел. Работая на винде

Подключение PostgreSQL к QT
Не пойму в чем дело #include &quot;mainwindow.h&quot; #include &quot;ui_mainwindow.h&quot; #include &lt;mainwindow.h&gt; #include &lt;QtSql/QSqlDatabase&gt;...

Подключение PostgreSQL к QT
Подскажите как с нуля посгрю к кьют подключить, или ссылочек на инфу, на просторах сети не чего путного не нашел. Работая на винде

Подключение к PostgreSQL
Помогите пожалуйста. Несколько дней как перешел с VB6 на VB.NET (Visual studio 2017) жизнь заставила. Не могу подключиться к DB...

Qt 4 подключение к PostgreSQL
Просветите новичка. Мне необходимо написать на Qt программу для работы с базой данных PostgreSQL. Начинаешь искать - сразу возникает...


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

Или воспользуйтесь поиском по форуму:
58
Ответ Создать тему
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru