|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.07.2012, 05:02 | #1 | |||||
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
Qt Creator и добавление/использование N форм в приложении на нем
Знакомлюсь с Qt, кроссплатформенным программированием и вспоминаю язык C++. Вопрос, заданный в теме, является очень простым, но я не могу разобраться с его решением.
Создаем в Qt Creator новый проект Qt Widget=>GUI приложение - проект успешно создался, появилось окно MainWindow, в которое добавляем разные кнопки и прочие элементы GUI. Добавляем в проект новое окно(Проекты=>Формы=>Добавить новый=>Qt=>Форма Qt Designer), которое называем MyForm. Теперь накидываем в это окно нужные кнопки(PushButton), пытаемся перейти к слоту(создать его), а в ответ получаем: Цитата:
Пробовал, по совету из диалогового окна, выполнять пересборку проекта(Сборка=>Очистить проект; Сборка=>Пересобрать проект), но толку ровно ноль! Это первая проблема, связанная с использованием нескольких окон в проекте. Теперь пытаюсь открыть из MainWindow окно MyForm - просто пишу: Код:
Цитата:
Цитата:
Цитата:
Цитата:
Заранее всем спасибо за помощь.
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
|
|||||
18.07.2012, 09:02 | #2 |
Пользователь
Регистрация: 03.07.2012
Сообщений: 14
|
1. При добавлении в проект формы QtDesigner, создаётся файл с расширением .ui,допустим Name.ui, а уже на этапе компиляции автоматически создаётся пара Name.h, Name.cpp в соответствующей динамической папке. Приведённого вами кода недостаточно, чтобы понять какое собственно имя у класса и соответственно у файла формы (ui_myform, myform, MyForm или myForm), ошибка скорее всего именно в том, что в #include вы указываете не то.
2. Код:
Код:
Код:
|
19.07.2012, 04:58 | #3 | |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
Цитата:
после открытия окна следующим образом: Код:
Edit: После правки кода на следующий, вторая форма нормально открывается и не закрывается: Код:
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Последний раз редактировалось Mixim; 19.07.2012 в 05:30. |
|
19.07.2012, 08:58 | #4 |
Пользователь
Регистрация: 03.07.2012
Сообщений: 14
|
Это потому, что при создании объекта вспомогательного класса, его область видимости ограничивается рамками функции внутри которой он объявлен (в общем случае блоком внутри "{ }"). После того, как функция (блок) заканчивается, объект уничтожается. При выделении памяти динамически, механизм другой. Вообще, лучше всего объявлять указатель на вспомогательную форму в описании основной (в хэдере), выделять память в конструкторе или чём-нибуть типа init(), а об освобождении памяти позаботится Qt, при уничтожении основной формы.
Лучшая книга по Qt на мой вкус: "C++ GUI Programming With Qt 4" - Jasmin Blanchette, Mark Summerfield, вроде и русский перевод неплохой есть. Но вам конечно ещё нужно почитать про чистый С++, чтобы основательно разобраться в работе с памятью и т.д. |
19.07.2012, 11:20 | #5 | |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
Да простят меня создатели .NET(C#), но он отучил напрочь от логики C++, вроде бы и назван почти также как плюсы, пишут что он является расширением плюсов, но 2-3 года работы в нем и полное забытие C++ гарантировано - единственного во-истинну кросплатформенного языка(Qt) - IMHO. MS и его соратники кричат на каждой конференции, что native'языки - это прошлое, но что еще может гарантировать кросплатформенность?!
Небольшой оффтоп: да, есть бесплатный кросплатформенный Mono, Mono Project, Gtk#, но у его компилятора есть некоторые проблемы с Linux(кажется на BugZilla уже около года весит тема с описанием бага(англ.):"Mono Develop установился в Linux нормально, но не запускается") и так этот баг не решен(сам ощутил его на себе). Спасибо большое за совет: Цитата:
Небольшой совет студентам, изучающим на летней практике .NET/C# - сдайте все задания по C#, напишите отчет и забудте о нем, иначе прощай кросплатформенность и универсальность программ(про templates в C# я вообще молчу)! Я не спорю, что в C# есть очень много хороших вещей, лично мне безумно нравился WPF и DataBinding, а также язык разметки XAML, если бы это добавили в C++, то у C# бы лишился вообще всех своих преимуществ по сравнению с ним. Небольшие извинения и просьба к активными участниками раздела " Кроссплатформенное программирование C/C++": прошу вас не возмущаться и не издеваться надо мной, если буду задавать глупые/тупые вопросы по C++, забыл его в силу долгого не использования
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
Последний раз редактировалось Mixim; 19.07.2012 в 11:58. Причина: добавление |
|
29.07.2012, 05:56 | #6 | |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
Возник небольшой связный с этой темой вопрос, начну по-порядку.
Реализую GUI-приложение на Qt под Linux. Предполагается, что оно будет работать(незакрываться) 24 часа в сутки 7 дней в неделю. Логика работы примерно следующая: открываем главную форму, на которой есть кнопки(открыть форму2, форму3 и т.д.); при нажатии на одну из кнопок, главная форма закрывается, открывается выбранная; на выбранной форме пользователь выполняет необходимые операции(ввод данных и прочее), нажимаеет "Далее", данные отправляются в определенное место, текущая форма закрывается, открывается вновь главная(привел очень сжатую последовательность открытия/закрытия форм, поэтому постоянно хранить в памяти все формы - непозволительная роскошь). Операции открытия/закрытия форм могут повторяться каждые 2 минуты=>после закрытия каждой формы необходимо чистить память. Пишу следующий черновой вариант обработчика в MainWindow: Код:
Код:
Код:
Сам являюсь крайне скупым на память человеком(практически за один бит удавлюсь), руководствуюсь принципом: сколько взял - столько и отдал, из-за чего сперва с крайним неуважением относился к .NET/C#, пока не узнал про GC. Если же даже самым приблизительным образом посмотреть на частоту открытия/закрытия форм, то получим за сутки: Цитата:
Поэтому прошу подсказать: будет ли очищаться память при использовании указанной методики?
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
|
|
30.07.2012, 15:50 | #7 |
Пользователь
Регистрация: 03.07.2012
Сообщений: 14
|
delete именно, что и освобождает память, выделенную под объект. Другое дело, что в вашей ситуации, главное окно целесообразнее будет не уничтожать и создавать каждый раз, а вызывать hide()/show().
|
01.08.2012, 07:33 | #8 |
Форумчанин
Регистрация: 29.10.2009
Сообщений: 259
|
Благодарю, последнее постараюсь учесть
Из всех классических книг, посвященных программированию, ненавижу всего одну - русский перевод книги Роберта Седжвика-"Фундаментальные алгоритмы C++". Предпочитаю читать её в оригинале.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ВебБраузер и использование в нем соксов | Зод | Работа с сетью в Delphi | 0 | 21.12.2011 13:06 |
Использование Asm в Qt Creator | Pecho | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 25.11.2011 00:45 |
Использование DSPack в консольном приложении | Jacobson | Мультимедиа в Delphi | 5 | 21.06.2010 05:21 |
Использование функций из других форм | JustKurt | Общие вопросы Delphi | 10 | 12.07.2009 21:16 |
Использование 2х форм | Zeraim | Общие вопросы Delphi | 4 | 27.05.2008 17:14 |