Создание только одного экземпляра окна |
Здравствуйте, гость ( Вход | Регистрация )
Создание только одного экземпляра окна |
breeve |
27.1.2011, 16:49
Сообщение
#1
|
Участник Группа: Участник Сообщений: 188 Регистрация: 26.12.2009 Пользователь №: 1336 Спасибо сказали: 9 раз(а) Репутация: 1 |
Как сделать чтобы окно можно было открыть только один раз.
Есть основное окно, и модальное диалоговое. У основного класса есть слот который создает диалоговое. Если два раза нажать кнопку, будет два окна. Как перед созданием проверять есть ли уже такое окно, но только таким образом что если такого окна еще нет чтобы он не повис))? |
|
|
abc |
27.1.2011, 16:59
Сообщение
#2
|
Участник Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: 4 |
дык если оно модальное, оно не должно давать возможность тыкать в родительское окно или вообще в любые окна приложения, смотря что задано в setWindowModality
|
|
|
breeve |
27.1.2011, 17:04
Сообщение
#3
|
Участник Группа: Участник Сообщений: 188 Регистрация: 26.12.2009 Пользователь №: 1336 Спасибо сказали: 9 раз(а) Репутация: 1 |
дык если оно модальное, оно не должно давать возможность тыкать в родительское окно или вообще в любые окна приложения, смотря что задано в setWindowModality Но у главного приложения нету окна, оно висит всегда в трее и чтобы открыть диалоговое окошко, то надо тыкнуть на трей. А если открыто окно не важно модальное не модальное, все равно на трей можно тыкнуть и открыть еще одно окно. Как вариант можно обрабатывать клики мышкой по иконке и затем смотреть если открыто хоть одно окно, то не открывать менюшку, и сделать открытое окно активным. Если все окна закрыты то позволить открыть меню. Только вот как это обрабатывать не знаю, нажатия могу, а вот как узнать какие сейчас окна открыты, и как специально не открывать контексное меню. Сообщение отредактировал breeve - 27.1.2011, 17:03 |
|
|
abc |
27.1.2011, 17:11
Сообщение
#4
|
Участник Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: 4 |
а нельзя создать это диалоговое окно 1 раз в конструкторе, а по кнопке просто делать show()?
а closeEvent переопределить - написать там hide() даже не надо трогать closeevent, это я погорячился |
|
|
breeve |
27.1.2011, 17:20
Сообщение
#5
|
Участник Группа: Участник Сообщений: 188 Регистрация: 26.12.2009 Пользователь №: 1336 Спасибо сказали: 9 раз(а) Репутация: 1 |
а нельзя создать это диалоговое окно 1 раз в конструкторе, а по кнопке просто делать show()? а closeEvent переопределить - написать там hide() даже не надо трогать closeevent, это я погорячился Так не получится поскольку таких окон несколько. И открыв одно окно меняються параметры для открытия другого. Можно конечно и так, но тогда придется много чего переделывать. Сообщение отредактировал breeve - 27.1.2011, 17:20 |
|
|
abc |
27.1.2011, 17:27
Сообщение
#6
|
Участник Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: 4 |
сделать глобальную переменную есть/нет окно, в кнопке проверять эту переменную и соответственно создавать или не создавать окно, при закрытии диалогового окна в closeEvent переменную изменять
|
|
|
Rocky |
27.1.2011, 19:05
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Что-то не понятно ничего.... Пора домой идти)
Это диалоговое окно - оно экзэмпляр одного класса? Вынести в мемберы главного класса указатель на него. В конструкторе главного класса присвоить NULL. Когда нужно показать это окно - если указатель не NULL, удалять и создавать заново. Если NULL - то просто создавать. Или нужно вообще не показывать контекстное меню если окно открыто? Как показываешь тогда это контекстное меню? Если ручками, то перед показом делать то что выше написал. Если через setContextMenu (или как она там называется), то видимо нужно ставить какой-нить eventFilter.... Как-то так.... |
|
|
Алексей1153 |
27.1.2011, 20:52
Сообщение
#8
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
нужно не глобальную, а статическую переменную Будет одно единственное окно
|
|
|
Litkevich Yuriy |
27.1.2011, 21:17
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Как вариант можно обрабатывать клики мышкой по иконке и затем смотреть если открыто хоть одно окно, то не открывать менюшку, и сделать открытое окно активным. Если все окна закрыты то позволить открыть меню. так обычно и делают.В конструкторе главного класса присвоить NULL. Когда нужно показать это окно - если указатель не NULL, удалять и создавать заново. Если NULL - то просто создавать. угу, только и NULL не нужен. достаточно нуля.
|
|
|
Rocky |
27.1.2011, 21:55
Сообщение
#10
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Litkevich Yuriy, а в чем отличие (может даже с точки зрения безопастности)
от
? (интересно потому, что часто вижу именно инициализацию нулем) Просто я например, всегда, если указатель инициализирую - то NULL, если просто переменную - то 0. (путь даже где-то и стоит #define NULL 0). Так не получится поскольку таких окон несколько. И открыв одно окно меняються параметры для открытия другого. Так классов окон у тебя несколько, а нужно чтобы в одно время было открыто только одно окно? Ну, тогда все то же, что ребята выше писали + запихать указатели в контейнер например (если окон много). Если не много, то просто указатели держать как переменные. |
|
|
Текстовая версия | Сейчас: 2.12.2024, 1:58 |