![]() |
|
|
![]()
|
|
| dmitrio |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Изучив наверное крайнюю малость C++, Qt, я кажется начинаю понимать, что я не знаю абсолютно ничего.
Сейчас нахожусь в ступоре, вроде и книги всякие читал, но какая-то дыра в голове образовалась. Для чего нужен файл main.cpp? Вот к примеру сейчас в данное время, у меня в main.cpp есть следующее:
По моей логике должно быть так, если файла БД не найдено, то все виджеты главного окна становятся не активными (w.closeWidgets(); ) открывается мастер создания БД (w.create_db();) там заполняются данные, база создается, и далее после закрытия мастера все виджеты становятся активными (w.openWidgets();) Но в данное время оно работает не так, сначала все виджеты главного окна становятся не активными, потом создается мастер (QWizard) и сразу же не дожидаясь выполняется w.openWidgets(), т.е все виджеты становятся активными. Есть мысли что w.openWidgets(); надо вешать на QWizardbutton::Finishbutton. Также есть мысли, что я все делаю не так. Скачивал разные исходники программ из инета на qt и везде в файле main.cpp, кроме:
больше ничего нет. Может быть все это мне пока тяжело дается потому что с ООП совсем мало знаком. В общем-то вопрос для чего нужен main.cpp? А то может можно и без него все делать, ну имею в виду только оставить выше указанный код с инклудами. Сейчас буду рыться в примерах от qt может там на меня просвещение снизойдет |
||||
|
|||||
| Greeneyed |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 71 Регистрация: 20.4.2006 Репутация: нет Всего: нет |
Никто не мешает тебе сделать проверку существования файла БД в конструкторе MainWindow.
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Весь GUI строится на основе сообщений. Поэтому задач у main() всего две: создать основное окно и запустить обработчик событий (app.exec()). Далее на каждый чих пользователя окну посылается сообщение, которое оно обрабатывает и совершает ряд действий.
Ты же пытаешься писать "синхронный" код (кстати, не очень понятно, что у тебя внутри create_db(), но подозреваю, что собака порылась именно там). Т.е. ты предполагаешь, что метод show() не возвращается сразу. А это не так. У класса QDialog и его потомков (QWizard в т.ч.) есть слот exec(), который работает в блокирующем режиме (т.е. как любая синхронная функция). Думаю, тебе нужно вызывать именно его вместо show(). Это сообщение отредактировал(а) bsa - 7.9.2011, 15:52 |
|||
|
||||
| dmitrio |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Спасибо за ответы. Шел сегодня на работу как раз об этом и думал.
в конструкторе MainWindow:
Wizard экземпляр QWizard. Вот такой подход у меня был. Использование exec() решило проблему, но я так понимаю синхронное программирование не правильный путь?
Я так понимаю сигнал-слот? В любом случае спасибо bsa за помощь!! Это сообщение отредактировал(а) dmitrio - 8.9.2011, 06:35 |
||||||
|
|||||||
| alexvs11 |
|
|||
|
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: 2 Всего: 10 |
нет на обработке наследников QEvent у каждого объекта в Qt, унаследованного от QObject (в том числе у QWidget и QApplication) есть очереди сообщений и и возможность их обработки там все хитро, но общий смысл такой, формировать event'ы и обрабатывать можете даже сами |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 24 Всего: 196 |
Смотря где. В данном случае имеет смысл делать блокировку исполнения (все равно, внутри exec имеется свой цикл обработки сообщений, которой дает возможность корректно работать всем окнам приложения). Именно для таких целей и придуманы модальные диалоги (вызов exec создает именно модальный диалог). |
|||
|
||||
| Lindemann66 |
|
|||
|
Thinking... ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 2.8.2011 Где: Ульяновск Репутация: нет Всего: нет |
main.cpp - точка входа в программу --------------------
stay true |
|||
|
||||
| dmitrio |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 61 Регистрация: 9.4.2009 Репутация: нет Всего: нет |
Ну про точку входа это понятно, я имел в виду есть ли смысл писать в этом файле основной код. Но вопрос уже решен. Спасибо
|
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |