使窗口隐藏的任务栏图标可见

时间:2016-09-26 17:30:49

标签: c++ qt winapi

我正在尝试在最小化我的窗口后显示我的应用程序的任务栏图标。我的窗口可以通过 show() showFullScreen()显示,因此我的隐藏窗口代码是:

w.setWindowFlags(w.windowFlags() | Qt::WindowStaysOnTopHint);

我也试过

w.setWindowFlags(w.windowFlags() | Qt::WindowStaysOnTopHint | Qt::Tool | etc);

但仍然相同:应用程序已最小化,但任务栏上没有图标。

here我了解到 setWindowFlags

  

注意:此函数在更改窗口的标志时调用setParent(),从而导致隐藏窗口小部件。您必须调用show()以使窗口小部件再次可见

但是我不能使用 show()因为我想隐藏它。

如何做到这一点?我应该使用WinApi还是有QT方式,我错过了? ( Qt :: WindowStaysOnTopHint 标志是必要的)

UPD1:我已经实现了自己的系统托盘,我需要在任务栏上显示图标

UPD2:我已经尝试了 showMinimized() setWindowState(Qt :: WindowMinimized)。在第一种情况下,任务栏上有图标,但在恢复窗口后(由 showFullScreen()显示)有窗口控件:最小化,关闭。在第二种情况下,它可以根据需要最小化和恢复,但任务栏上没有图标。

1 个答案:

答案 0 :(得分:0)

我做了我想做的事。但我使用了 WinApi 。希望这会对某人有所帮助。所以,毕竟

  • 最小化我使用以下内容:

               if (!isRecording()) {
                    try {
                        record();
                        getActivity().invalidateOptionsMenu();
                    } catch (Exception e) {
                        Log.e(getClass().getSimpleName(),
                                "Exception trying to record", e);
                        Toast.makeText(getActivity(), e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }
                } else {
                    try {
                        stopRecording();
                        getActivity().invalidateOptionsMenu();
                    } catch (Exception e) {
                        Log.e(getClass().getSimpleName(),
                                "Exception trying to stop recording", e);
                        Toast.makeText(getActivity(), e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }
    
                } 
    
  • 恢复至" prev"我使用的状态:

    ShowWindow(hwnd, SW_SHOWMINIMIZED); 
    
  • 设置 stayOnTop 标志由以下人员完成:

       widget->show(); 
       // or
       widget->showFullScreen();