У меня есть приложение Qt, где есть только один виджет, который не является MainWindow
просто QLabel
, У него нет строки заголовка (получено через setWindowFlags(Qt::FramelessWindowHint)
), поэтому стандартные кнопки сворачивания и разворота недоступны. Но есть боковая панель на стороне виджета, где мы предоставляем кнопку минимизации, которая должна вести себя как стандартная кнопка минимизации.
Как мне это сделать?
Я попробовал решения в Минимизация приложения Qt а также Qt C ++ свернуть и развернуть окно. Ни то, ни другое не работает. Конечно, я могу скрыть приложение, нажав кнопку свертывания. Проблема в том, как его восстановить с помощью стандартных механизмов?
Сценарии:
На Mac значок док-станции щелкается. К счастью, нативные API OS X могут дать мне уведомление, когда щелкают по значку док-станции, поэтому, основываясь на этом, я могу показать виджет и сделать его активным.
На Mac значок приложения дважды щелкается в /Applications
или нажал на Launchpad
, Как мне получить уведомление об этом? Код даже не доходит до main.cpp
что я могу показать его оттуда, если он скрыт.
В Windows щелкается значок приложения на панели задач (в приложении нет значка на панели задач). Как мне получить уведомление об этом и показать его?
В Windows значок приложения дважды щелкается либо в Program Files, либо может быть значком на рабочем столе. Как мне получить уведомление об этом, чтобы показать его?
Если этот подход неверен, как мне показать и скрыть приложение в соответствии со стандартным поведением как на Mac, так и на Windows?
Платформа — Qt 5.3.1, 32 бит.
Это не ответ, но он может помочь определить, какие события вызваны (пункты 1, 2 и 3).
#include <QApplication>
class newapp : public QApplication {
Q_OBJECT
public:
newapp( int &argc, char **argv ) : QApplication(argc, argv) {}
protected:
bool event(QEvent *ev) {
std::cerr << "APPLICATION EVENT " << ev->type() << std::endl;
return QApplication::event(ev);
}
};
и в вашем main.cc
у тебя будет
newapp myapp(argc,argv);
вместо
QApplication myapp(argc,argv)
После того, как вы определили события, которые вы вызвали, вы почти закончили: вам нужно сообщить вам newapp, чтобы восстановить размер Qlabel
(существует множество способов сделать это, поэтому предоставьте свою реализацию, и вы можете получить более целенаправленную помощь)
Что касается пункта 4, то это нечто иное из-за различий в поведении операционных систем, поскольку при двойном щелчке по Windows во втором приложении запускается другой экземпляр приложения (в OSx открывается первое открытое приложение). Вы можете найти что-то, что подходит вам в этом проекте ВОТ
Других решений пока нет …