|
0 / 0 / 0
Регистрация: 20.08.2015
Сообщений: 34
|
|
Закрыть Qmessagebox через некоторое время06.10.2016, 10:08. Показов 8629. Ответов 27
Метки нет (Все метки)
Всем привет. Столкнулся с небольшой проблемой. Как сделать так, чтобы окно сообщения само закрылось через некоторое время, дело в том, что после выполнения exec я не могу уже ничего выполнить, окно появляется и его только закрыть вручную можно, пробовал создавать новый поток перед exec-ом, который через некоторое время отправит команду close, но мне кажется это неправильно, так как в основном потоке уже происходит цикл обработки окна... Помогите, в какую сторону рыть?
0
|
|
| 06.10.2016, 10:08 | |
|
Ответы с готовыми решениями:
27
Excel: Закрыть книгу через некоторое время
|
|
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
|
|
| 06.10.2016, 10:37 | |
|
А не проще ли просто создать свое окно с любым сообщением и с таймером......
0
|
|
|
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
|
|
| 06.10.2016, 11:25 | |
|
Артем2289, QTimer::singleShot
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2015
Сообщений: 34
|
|
| 06.10.2016, 12:00 [ТС] | |
|
Он выдает ошибку, что Qtimer может быть использован только в потоке... QObject::startTimer: Timers can only be used with threads started with QThread... вот так вот.
to solar_wind: вы имеете ввиду mainwindow?
0
|
|
|
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
|
|
| 06.10.2016, 12:04 | |
|
Артем2289, код покажи, явно делаешь что то не то
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2015
Сообщений: 34
|
||||||
| 06.10.2016, 12:11 [ТС] | ||||||
0
|
||||||
|
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
|
||||||
| 06.10.2016, 12:20 | ||||||
Добавлено через 1 минуту Артем2289, можешь показать, что у тебя там ниже (после 10 строчки) по коду? show тоже должен отработать корректно.
1
|
||||||
|
0 / 0 / 0
Регистрация: 20.08.2015
Сообщений: 34
|
||||||
| 06.10.2016, 12:24 [ТС] | ||||||
дальше пока бред, остановился на этой проблеме.. задача программы такова, чтобы выводить сообщение на экран в определенное время и закрываться через некоторое время, если его не закрыли
0
|
||||||
|
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
|
||||||
| 06.10.2016, 12:27 | ||||||
|
Артем2289, понятно. Подход не верный, ключевой момент в приложении построенном с использованием Qt - запуск цикла обработки событий. QApplication::exec, QDialog::exec также запускает eventLoop, и по этому диалог отображается корректно, при вызове show инициируется только показ диалога.
Вот эту порнуху - нужно вынести в другой поток
0
|
||||||
|
0 / 0 / 0
Регистрация: 20.08.2015
Сообщений: 34
|
||
| 06.10.2016, 12:43 [ТС] | ||
|
прогу пишу в msvc 2015 + qt 5.7.0 x64 , сборка динамическая
Добавлено через 3 минуты извините, всё работает, нужно поставить Release. А почему в Debug не работает не знаете? И такой вопрос, если окно закроет пользователь раньше, чем это сделает таймер, не выйдет ли ошибки? И если я вдруг помещу создания окна в свой класс, при удалении объекта класса, удалятся ли данные об окне, если да, то насколько это корректно? Добавлено через 5 минут
Добавлено через 6 минут И тогда получается, что если мой дополнительный поток, в котором решается когда запускать окно, должен же будет как то знать о состоянии окна или отпрвлаять команду основному потоку на открытие окна например, как же это реализовывать? надо будет передавать данные в поток? и вообще можно ли вызвать то же close из не основного потока?
0
|
||
|
419 / 418 / 72
Регистрация: 27.05.2012
Сообщений: 1,168
|
|
| 06.10.2016, 12:57 | |
|
Артем2289, можешь полное задание выложить - я мог бы показать, что да как
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2015
Сообщений: 34
|
|
| 06.10.2016, 13:25 [ТС] | |
|
суть задания простая, выводить окно 2 раза в день в определенное время, как напоминание... и всё
0
|
|
|
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
|
|
| 06.10.2016, 16:06 | |
|
если окно должно быть модельным, то сделайте свой класс на базе QMessageBox или QDialog и в своем классе запустите таймер ну и вызывайте окно через exec()... если же устраивает вариант с не модальным окном, то сделайте QMessageBox, создайте таймер, соедините их как-то так: connect(timer, SIGNLA(timeout()), messageBox, SLOT(accept())); и вызывайте через messageBox.show();
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2015
Сообщений: 34
|
|
| 06.10.2016, 16:31 [ТС] | |
|
мне нужен не модальный вариант. Хорошее предложение, скажите а будет ли работать так: создать свой класс mesbox, запустить окно, потом оно закроется через время, как я делал в описанном выше коде, переопределить свой Qcloseevent который бы по событию закрывал окно, выполнял нужную мне функцию и через какое то время по расписанию снова запускал окно?
если да, то такой вопрос: как правильно закрыть mesbox, чтобы потом снова можно было его запустить? или объект нужно будет объявить заново? скорее, как открыть закрытый mesbox? Добавлено через 9 минут Вообще конечно это не правильно, подскажите пожалуйста, как правильно передать команду show или hide объекту находящемуся в главном потоке из второго потока? Слышал, что нужен коннект и QEvent, как их использовать?
0
|
|
|
1936 / 1048 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
|
|
| 06.10.2016, 17:11 | |
|
эм... а вы уверенны, что вам поток нужен?
по поводу вышеописанного, я не уверен что это правельное решение, объектно ориентированные суицид, а потом еще и создание самого себя аки феникс - вряд-ли такие кони взлетят... у вас есть класс, в котором должен жить ваш попап, собственно сделайте в этом классе объект попапа, сделайте коннекты сигналов и слотов (как между вашим классом и попаппом, так и на оборот (я так понимаю, нужно понимать, когда попапчик закрылся, соответственно объект класса попап бросит сигнал и у себя в классе, который содержит этот попапчик выполните все необходимые действия и заодно заведете таймер на пересоздание/повторый показ (нужное подчеркнуть) попапа. по поводу межпотокового взаимодействия, то пользуйте сигналы и слоты.
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2015
Сообщений: 34
|
||||||
| 07.10.2016, 09:14 [ТС] | ||||||
0
|
||||||
|
0 / 0 / 0
Регистрация: 20.08.2015
Сообщений: 34
|
|
| 07.10.2016, 09:19 [ТС] | |
|
написал вот такой код, хотел использовать сигнал из созданного потока, выдает следующие ошибки при компиляции...
0
|
|
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
|
| 07.10.2016, 09:38 | |
|
Артем2289, в Qt есть специальное окно заставки, реализованное классом QSplashScreen
оно не подойдет?
0
|
|
|
0 / 0 / 0
Регистрация: 20.08.2015
Сообщений: 34
|
|
| 07.10.2016, 10:01 [ТС] | |
|
Понимаете, дело в том, что есть много вариантов, как реализовать само окно или сообщение, у меня проблема в том, чтобы разделить цикл обработки событий от моих вычислений. у меня никак не получается отправить из потока сигнал слоту на закрытия окна и проблема в том, что я вообще не понимаю почему. Вот тут http://doc.qt.io/qt-5/qthread.html есть пример, его я делаю по аналогии у себя и он ни фига не раюотает
0
|
|
|
Модератор
8979 / 6745 / 921
Регистрация: 14.02.2011
Сообщений: 23,863
|
|||||||
| 07.10.2016, 11:23 | |||||||
|
принцип примерно такой
вот примерчик http://qt-doc.ru/okno-qsplashscreen.html
1
|
|||||||
| 07.10.2016, 11:23 | |
|
Помогаю со студенческими работами здесь
20
Во время любых игр через некоторое время отключается ноутбук от перегрева Через некоторое время выключается ПК Пропадает интернет через некоторое время Вывести сообщение через некоторое время Пропадает интернет через некоторое время Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|