![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
bigory |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Доброе всем время суток!
Подскажите как создавать второе окно? Расположить на нем нужные мне элементы? и как в коде связываться с этими элементами? Я хочу из главного окна вызвать через меню второе окно, что-то похожее на модальное диалоговое окно, где будут находиться мои компоненты. И как сделать чтобы при закрытии программы не оставалась в памяти невидимое незакрытое окно |
|
|
Алексей1153 |
![]()
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
Подскажите как создавать второе окно? любое окно (второе, третье, десятое) создаётся одинаково:
Расположить на нем нужные мне элементы? и точно так же создаются элементы, добавляются на окно-диалог. Некоторые любят лейауты (компоновщики) ещё использовать - но это смотри сам, а по мне так они лишние ![]() Я хочу из главного окна вызвать через меню второе окно, что-то похожее на модальное диалоговое окно, где будут находиться мои компоненты. модальное окно будет блокировать родительское окно. Тебе немодальное нужно И как сделать чтобы при закрытии программы не оставалась в памяти невидимое незакрытое окно собственно, создать немодальное окно, а затем скрыть (hide()) |
|
|
bigory |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Мне интересно как и модальное и немодальное окно создается
|
|
|
Алексей1153 |
![]()
Сообщение
#4
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
читай про методы
int QDialog::exec () и void QWidget::show () + void QDialog::setModal ( bool modal ) |
|
|
Litkevich Yuriy |
![]()
Сообщение
#5
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
bigory |
![]()
Сообщение
#6
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
И еще один вопрос.
Я хочу создать в режиме дизайнера 2е окно и вызывать его как модальное окно. Вот я создал нужное мне 2е окно, расположил на нем элементы, но как его связать и вызывать его когда оно нужно? |
|
|
bigory |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Почитал я про диалоговые окна, но пока реши начать с простого, но что-то не получается.
Вызываю окно, оно появляется и сразу исчезает. Вот моя сборка http://file.qip.ru/file/mj8VvttZ/Admin.html ( 2.47 Kb ) Что там не так? |
|
|
BRE |
![]()
Сообщение
#8
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
bigory |
![]()
Сообщение
#9
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Можно пример? New может сильно жрать память
|
|
|
bigory |
![]()
Сообщение
#10
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Не понял что значит создать объект на куче
Я попробовал сделать вот так: Раскрывающийся текст void MainWindow::IP() { Dialog* a=new Dialog(); a->show(); } Вот вопрос, не будет сильно влиять на память? Какой подход будет более правильным? |
|
|
Sokoloff |
![]()
Сообщение
#11
|
Участник ![]() ![]() Группа: Участник Сообщений: 237 Регистрация: 1.4.2009 Из: Москва Пользователь №: 654 Спасибо сказали: 50 раз(а) Репутация: ![]() ![]() ![]() |
Не понял что значит создать объект на куче Я попробовал сделать вот так: Раскрывающийся текст void MainWindow::IP() { Dialog* a=new Dialog(); a->show(); } Вот вопрос, не будет сильно влиять на память? Какой подход будет более правильным? Вот именно так будет утечка памяти. Делая new ты выделяешь память, и тут же теряешь указатель на нее, поэтому освободить уже никак не сможешь. Либо объявляй переменную в классе, отлавливай закрытие диалога и освобождай память. Или смотри в сторону флага Qt::WA_DeleteOnClose, тогда диалог сам удалится из памяти после закрытия. Скорее тебе подойдет второе. Сообщение отредактировал Sokoloff - 22.10.2010, 23:27 |
|
|
bigory |
![]()
Сообщение
#12
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Копался по инету в поиске как автоматически освобождать память и где-то встретилось такой вариант:
Вот хочу уточнить, Dialog* a=new Dialog(this); мне позволит автоматически удалить при закрытии окна? Вот на это я наткнулся Цитата QPushButton *btn = new QPushButton(this) // обьект сам удалиться
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#13
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
bigory |
![]()
Сообщение
#14
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А можно ли все таки простой пример как удалить виджет при его закрытии? Так вроде надежнее
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Не понял что значит создать объект на куче когда объект создаётся с помощью оператора new, то он создаётся в "куче".Когда объект создаётся обычным образом: то он создаётся на стекеА можно ли все таки простой пример как удалить виджет при его закрытии? поставить виджету флаг Qt::WA_DeleteOnCloseНо в твоём примере, с диалоговым окном, лучше всего диалог создавать на стеке (пример из асистента): при выходе из функции (области видимости) объект dialog будет уничтожен автоматически и немедленно.метод exec() создаёт цикл обработки событий и не даёт программе исполнятся дальше. Т.е. диалоговое окно будет модальным (не пустит в родителя). При закрытии диалога, метод exec() завершится и выполнение программы продолжится. |
|
|
bigory |
![]()
Сообщение
#16
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вот так?
|
|
|
bigory |
![]()
Сообщение
#17
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Заработал вот так:
То что dialog.setWordCount(document().wordCount()); так и не понял для чего и что это такое |
|
|
Litkevich Yuriy |
![]()
Сообщение
#18
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
bigory |
![]()
Сообщение
#19
|
Студент ![]() Группа: Участник Сообщений: 77 Регистрация: 10.10.2010 Пользователь №: 2099 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Понял, спасибо!
Думаю, вопрос по открытию и закрытию диалогового окна отпал. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 14.4.2025, 7:57 |