Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-最小化和最大化应用程序,无需标准标题栏按钮_C++_Qt_Minimize_Qmainwindow - Fatal编程技术网

C++ Qt-最小化和最大化应用程序,无需标准标题栏按钮

C++ Qt-最小化和最大化应用程序,无需标准标题栏按钮,c++,qt,minimize,qmainwindow,C++,Qt,Minimize,Qmainwindow,我有一个Qt应用程序,其中只有一个小部件不是MainWindow,而是QLabel。它没有标题栏(通过设置窗口标志(Qt::FramelessWindowHint)获得),因此标准的最小化和最大化按钮不可用。但是在小部件的一侧有一个侧边栏,我们提供了一个最小化按钮,该按钮应该像标准的最小化按钮一样工作 我该怎么做 我尝试了和的解决方案。两者都不起作用。当然,我可以通过单击最小化按钮隐藏应用程序。问题是,如何通过标准机制恢复它 场景: 在Mac上,单击dock图标。谢天谢地,OSX原生API可以在

我有一个Qt应用程序,其中只有一个小部件不是
MainWindow
,而是
QLabel
。它没有标题栏(通过
设置窗口标志(Qt::FramelessWindowHint)
获得),因此标准的最小化和最大化按钮不可用。但是在小部件的一侧有一个侧边栏,我们提供了一个最小化按钮,该按钮应该像标准的最小化按钮一样工作

我该怎么做

我尝试了和的解决方案。两者都不起作用。当然,我可以通过单击最小化按钮隐藏应用程序。问题是,如何通过标准机制恢复它

场景:

  • 在Mac上,单击dock图标。谢天谢地,OSX原生API可以在单击dock图标时给我一个通知,因此基于此,我可以取消隐藏小部件并使其处于活动状态

  • 在Mac电脑上,在
    /Applications
    中双击应用程序图标,或在
    启动板中单击应用程序图标。我如何获得此通知?代码甚至没有到达
    main.cpp
    ,如果它被隐藏,我可以从那里取消隐藏它

  • 在Windows上,单击任务栏中的应用程序图标(应用程序没有托盘图标)。我如何获得通知并取消隐藏它

  • 在Windows上,应用程序图标可以在程序文件中双击,也可以是桌面快捷方式图标。我如何获得取消隐藏的通知

  • 如果这个方法不正确,我如何在Mac和Windows上按照标准行为显示和隐藏应用程序


    平台-Qt 5.3.1,32位。

    这不是答案,但它可能有助于确定触发了哪些事件(第1、2和3点)

    而不是

    QApplication myapp(argc,argv)
    
    一旦您确定触发的事件,您就差不多完成了:您需要告诉您的新应用程序恢复
    Qlabel
    的大小(有很多方法可以做到这一点,因此提供您的实现,您可能会得到更集中的帮助)


    对于第4点,由于操作系统之间的行为不同,这是另一回事,如在Windows中,双击某个应用程序将启动该应用程序的另一个实例(在OSx上,它将启动第一个打开的应用程序)。您可能会在这个项目中找到适合您的东西

    您可以尝试在接受最小化之前
    saveGeometry
    saveState
    ,然后进行
    restoregometry
    restoreState
    您能给出一个示例代码吗,或者一个最小的工作示例?原则上,如果发生了什么事情,它应该被
    事件(QEvent*ev)
    捕获,因此通过在
    QLabel
    中重新实现此方法,您应该能够通过检查
    ev->type()
    值来查看追加的内容和事件。是的,问题是如何最小化它(而不是关闭它),以及如何在我前面提到的多种情况下恢复它。我还是不明白你的意思。一个小的示例代码会很好..谢谢Bibi。一些指针会有帮助,这对1、2和3有什么帮助?代码甚至没有进入
    main.cpp
    在这3种情况下,单击Launchpad中的图标如何进入
    event
    方法?这是因为
    newapp
    是一个
    QApplication
    并且它从桌面接收事件(以下是列表:)。然后由
    newapp
    来处理它(即隐藏或显示
    QLabel
    )在我的情况下,我应该查找什么事件类型,即在应用程序中双击应用程序图标或在启动板中单击应用程序图标?事实上,有很多事件(如上面的链接所示)。我发布的代码是为了找出哪个是哪个。一旦确定了这一点,就可以实现应用程序对此类信号的反应。请张贴一些你的代码,以便我们能迅速找到答案。好的。我正在尝试使用
    QEvent::ApplicationActivate
    。到目前为止,它是在Mac中工作的,检测停靠图标点击以及启动板/应用程序点击。我将在Windows上试用。
    newapp myapp(argc,argv);
    
    QApplication myapp(argc,argv)