Qt — свернуть и развернуть приложение без стандартных кнопок заголовка

У меня есть приложение Qt, где есть только один виджет, который не является MainWindowпросто QLabel, У него нет строки заголовка (получено через setWindowFlags(Qt::FramelessWindowHint)), поэтому стандартные кнопки сворачивания и разворота недоступны. Но есть боковая панель на стороне виджета, где мы предоставляем кнопку минимизации, которая должна вести себя как стандартная кнопка минимизации.

Как мне это сделать?

Я попробовал решения в Минимизация приложения Qt а также Qt C ++ свернуть и развернуть окно. Ни то, ни другое не работает. Конечно, я могу скрыть приложение, нажав кнопку свертывания. Проблема в том, как его восстановить с помощью стандартных механизмов?

Сценарии:

  1. На Mac значок док-станции щелкается. К счастью, нативные API OS X могут дать мне уведомление, когда щелкают по значку док-станции, поэтому, основываясь на этом, я могу показать виджет и сделать его активным.

  2. На Mac значок приложения дважды щелкается в /Applicationsили нажал на Launchpad, Как мне получить уведомление об этом? Код даже не доходит до main.cpp что я могу показать его оттуда, если он скрыт.

  3. В Windows щелкается значок приложения на панели задач (в приложении нет значка на панели задач). Как мне получить уведомление об этом и показать его?

  4. В Windows значок приложения дважды щелкается либо в Program Files, либо может быть значком на рабочем столе. Как мне получить уведомление об этом, чтобы показать его?

Если этот подход неверен, как мне показать и скрыть приложение в соответствии со стандартным поведением как на Mac, так и на Windows?

Платформа — Qt 5.3.1, 32 бит.

1

Решение

Это не ответ, но он может помочь определить, какие события вызваны (пункты 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 открывается первое открытое приложение). Вы можете найти что-то, что подходит вам в этом проекте ВОТ

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]