Russian Qt Forum
Ноябрь 24, 2024, 10:34
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Model-View (MV)
>
Обновить ComboBox
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Обновить ComboBox (Прочитано 7601 раз)
cya-st
Гость
Обновить ComboBox
«
:
Февраль 19, 2010, 21:57 »
Всем привет...
Есть ComboBox, который привязан к полю таблицы БД. Выводится все нормально, но когда я вношу изменения в таблицу, то мне необходимо обновить отображение в ComboBox. Вопрос: как это сделать?
Записан
alexman
Гость
Re: Обновить ComboBox
«
Ответ #1 :
Февраль 22, 2010, 13:14 »
Например, по таймеру проверять поле БД и если изменилось содержимое, то менять combo box.
Записан
crossly
Гость
Re: Обновить ComboBox
«
Ответ #2 :
Февраль 22, 2010, 19:30 »
зачем таймер.... если все на одной форме....то обновлять содержимое после удачного submit()
Записан
SABROG
Гость
Re: Обновить ComboBox
«
Ответ #3 :
Февраль 22, 2010, 23:28 »
Нужно переопределять QComboBox::showPopup(), обновлять в нем модель и вызывать оригинальный/базовый showPopup().
В зависимости от скорости обработки SQL запроса и других факторов все это дело может подтормаживать. Поэтому логично будет добавить на тулбар кнопку типа "обновить форму" и обновлять модель уже в ней.
Записан
cya-st
Гость
Re: Обновить ComboBox
«
Ответ #4 :
Февраль 23, 2010, 00:00 »
Спасибо всем. Попробую переопределить showPopup.
Записан
crossly
Гость
Re: Обновить ComboBox
«
Ответ #5 :
Февраль 23, 2010, 12:51 »
Цитата: SABROG от Февраль 22, 2010, 23:28
Нужно переопределять QComboBox::showPopup(), обновлять в нем модель и вызывать оригинальный/базовый showPopup().
В зависимости от скорости обработки SQL запроса и других факторов все это дело может подтормаживать. Поэтому логично будет добавить на тулбар кнопку типа "обновить форму" и обновлять модель уже в ней.
думаю это излишне.... ведь в таком случае обновление будет при каждом показе списка.... при этом обновления в базе может и не быть...
Записан
SABROG
Гость
Re: Обновить ComboBox
«
Ответ #6 :
Февраль 23, 2010, 13:56 »
Цитата: crossly от Февраль 23, 2010, 12:51
Цитата: SABROG от Февраль 22, 2010, 23:28
Нужно переопределять QComboBox::showPopup(), обновлять в нем модель и вызывать оригинальный/базовый showPopup().
В зависимости от скорости обработки SQL запроса и других факторов все это дело может подтормаживать. Поэтому логично будет добавить на тулбар кнопку типа "обновить форму" и обновлять модель уже в ней.
думаю это излишне.... ведь в таком случае обновление будет при каждом показе списка.... при этом обновления в базе может и не быть...
Я предложил 2 варианта и посоветовал использовать второй. Человек не захотел, это его выбор. В любом случае пока запрос к базе не сделаешь никогда не узнаешь обновилось в ней что-то или нет. Нормальный Notification поддерживает только PostgreSQL, но модель все равно этим не пользуется.
Записан
cya-st
Гость
Re: Обновить ComboBox
«
Ответ #7 :
Февраль 23, 2010, 16:24 »
Цитировать
Я предложил 2 варианта и посоветовал использовать второй. Человек не захотел, это его выбор. В любом случае пока запрос к базе не сделаешь никогда не узнаешь обновилось в ней что-то или нет. Нормальный Notification поддерживает только PostgreSQL, но модель все равно этим не пользуется.
Пришлось взять первый вариант. Так как это клиентская программа и клиентов может быть запущено определенное количество ив каждом клиенте могут добавлятся данные. Еще рассматривался вариант с таймером, но на мой взгляд переопределение QComboBox::showPopup() лучше.
Записан
SABROG
Гость
Re: Обновить ComboBox
«
Ответ #8 :
Февраль 23, 2010, 17:21 »
На работе я использую программу написанную на Дельфи, её стоимость около 60 тыс.руб. за лицензию. Многопользовательские лицензии конечно дешевле. Самому проекту около 15 лет и вначале программа работала под DOS, окошки типа как в ncurses. База данных MSSQL обновление форм происходит по таймеру, частота которого задается в настройках, также на тулбаре есть кнопка "Обновить форму", в контекстном меню формы есть итем "Обновить форму", в меню "Файл" есть итем "Обновить все формы". Всё это работает через DBGrid. Мы в общем-то уже привыкли обновлять формы вручную перед тем как начать работать с данными. Редактирование данных выглядит как создание модального диалога с полями, то есть тут нет такого как редактирование ячеек в Excel. В момент вызова редактирования записи на SQL сервер высылается команда блокировка записи или целого списка записей (если было выделено несколько). Когда другой пользователь пытается отредактировать ту же запись ему выводится диалог с ProgressBar'ом и сообщение о том, что запись блокирована таким-то пользователем, при этом запускается таймер, который постоянно дергает таблицу на предмет освобождения записи. Ты можешь либо ждать своей очереди, либо нажать "Отмена". Бывает и такое, что запись давно уже удалена, а у тебя она есть в таблице. Естественно, при вызове редактирования, клиент спрашивает SQL сервер блокирована ли запись, существует ли она вообще. На мой взгляд это всё один большой костыль, но исходя из архитектуры SQL серверов выбора у программистов обычно не бывает. Кстати трафик между клиентами и SQL сервером просто огромен, поэтому если сервак в инете и нет безлимитки, то можно разориться.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...