23 / 21 / 2
Регистрация: 04.09.2019
Сообщений: 425

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

03.08.2022, 18:03. Показов 4678. Ответов 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,363
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,363
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru