Qt 单击任务栏图标实现最小化

Qt中对于窗口边框的设置一般用到setWindowFlags函数。

void setWindowFlags(Qt::WindowFlags type)

如果只setWindowFlags(Qt::FramelessWindowHint);

去掉边框,此时会发现,当程序打开后,单击任务栏的按钮,会发现无法最小化,隐藏窗口。

解决的方法是:

setWindowFlags(Qt::Window|Qt::FramelessWindowHint |Qt::WindowSystemMenuHint|Qt::WindowMinimizeButtonHint|Qt::WindowMaximizeButtonHint);

再次测试,发现边框去掉了,而且鼠标点击任务栏图标,也可以显示和隐藏窗口了。

附:

Qt::Widget
This is the default type for QWidget.

Widgets of this type are child widgets if they have a parent,and independent(独立的) windows if they have no parent.

See also Qt::Window and Qt::SubWindow.

Qt::Window
Indicates(标志,象征) that the widget is a window.

Usually with a window system frame and a title bar,irrespective of (不管)whether the widget has a parent or not.

Note that it is not possible to unset this flag if the widget does not have a parent.

Qt::Dialog Indicates that the widget is a window that should be decorated as a dialog (i.e., typically no maximize or minimize buttons in the title bar). This is the default type for QDialog. If you want to use it as a modal dialog, it should be launched from another window, or have a parent and used with the QWidget::windowModality property. If you make it modal, the dialog will prevent other top-level windows in the application from getting any input. We refer to a top-level window that has a parent as a secondary window.
Qt::FramelessWindowHint
Produces a borderless window.

The user cannot move or resize a borderless window via the window system.

On X11, the result of the flag is dependent on the window manager and its ability to understand Motif and/or NETWM hints. Most existing modern window managers can handle this.

Qt::CustomizeWindowHint Turns off the default window title hints.
Qt::WindowTitleHint Gives the window a title bar.
Qt::WindowSystemMenuHint
Adds a window system menu, and possibly a close button (for example on Mac).

If you need to hide or show a close button, it is more portable to use WindowCloseButtonHint.

Qt::WindowMinimizeButtonHint
Adds a minimize button.

On some platforms this implies Qt::WindowSystemMenuHint for it to work.

Qt::WindowMaximizeButtonHint
Adds a maximize button.

On some platforms this implies Qt::WindowSystemMenuHint for it to work.

Qt::WindowMinMaxButtonsHint
Adds a minimize and a maximize button.

On some platforms this implies Qt::WindowSystemMenuHint for it to work.

Qt::WindowCloseButtonHint
Adds a close button.

On some platforms this implies Qt::WindowSystemMenuHint for it to work.

原文地址:https://www.cnblogs.com/granx/p/9563315.html

时间: 2024-10-12 05:55:49

Qt 单击任务栏图标实现最小化的相关文章

C#实现无标题栏窗体点击任务栏图标正常最小化或还原的解决方法

对于无标题栏窗体,也就是FormBorderStyle等于System.Windows.Forms.FormBorderStyle.None的窗体,点击任务栏图标的时候,是不能象标准窗体那样最小化或还原的.把下面的代码加到你的Form实现类中,即可实现点击任务栏图标正常最小化或还原窗体. [c-sharp] view plain copy protected override CreateParams CreateParams { get { const int WS_MINIMIZEBOX =

关于点击程序的任务栏图标无法最小化程序界面的问题

一般情况下,点击程序任务栏的图标,程序会响应WM_SYSCOMMAND消息,然后再OnSysCommand()消息函数里面截取 (nID & 0xFFF0) == SC_MINIMIZE这个消息. 然后 ShowWindow(SW_HIDE); //隐藏当前窗口 Shell_NotifyIcon(NIM_ADD,&m_NotifyData); //注册任务栏信息 就可以把窗口最小化. 但是,不知道为什么我的程序无法响应OnSysCommand消息,在网上查询了下 在InitDialog中加

firemonkey 点击任务栏图标不能最小化

1.新建firemonkey 窗体 2.设置窗体的FormStyle属性为popup 或者直接写代码 procedure TForm1.FormCreate(Sender: TObject); begin Self.FormStyle :=TFormStyle.Popup; end;

C#:隔离点击任务栏上的图标时的“最小化或者恢复”的效果

通常点击任务栏上的图标时,对应窗体实现“最小化或者恢复”的效果.但是在做最小化到托盘时,不希望点击任务栏图标时最小化到托盘,即希望拦截了这些效果(不允许:通过点击任务栏上的图标,实现“最小化或者恢复”的效果): 具体实现代码如下: #region 区别 任务栏中点击窗体图标(最小化|恢复)与点击最小化按钮 private int WM_SYSCOMMAND = 0x112; private long SC_MINIMIZE = 0xF020; protected override void Wn

C#:实现托盘(任务栏图标与托盘图标互斥)

实现托盘(任务栏图标与托盘图标互斥),并且在点击任务栏图标时实现的最小化与点击最小化按钮分离. 具体如下: 1.向窗体上添加如下控件:MenuStrip menuStrip1, NotifyIcon ni_frmMain,Timer timer1, ContentMenuStrip cms_notify.其中notify中包含显示.退出等. 2.实现的代码: //字段: //当前子Form private CurrentForm childForm = null; //上次窗体的状态 priva

转 点击关闭时最小化到任务栏

来源:http://www.2cto.com/kf/201401/274489.html 现在很多软件如360杀毒软件.酷狗音乐都拥有最小化至任务栏并在系统托盘区留下图标,我的项目同样需要该功能.所以本文主要叙述如何使用C#让窗体最小化至任务栏,同时在系统托盘区的图标点击左键能显示窗体,右键能关联控件显示3个常用功能.主要涉及到的控件是NotifyIcon和ContextMenuStrip,此类文章较多,希望作者以自己的独特视角给予大家帮助. 一.界面操作 1.创建"Windows窗体应用程序&

delphi程序最小化任务栏控件 托盘

unit MyTray; interface uses   Windows,Messages,SysUtils,Classes,Graphics,Controls, Forms,Dialogs,ShellApi,ExtCtrls,StdCtrls; const //自定义托盘消息   WM_TrayMsg=WM_USER+10; type //恢复窗口的方式,左双击,右双击,左单击,右双击   TRMode=(LDbClick,RDbClick,LCLick,RClick);   TMyTray

WinForm 之 窗口最小化到托盘及右键图标显示菜单

Form最小化是指整个Form都缩小到任务栏上,但是窗体以Form的标题栏形式显示在任务栏上, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件. 一.添加NotifyIcon控件 1 如下图为窗体添加一个 NotifyIcon 控件,并指定 Icon 和 Text 属性,如下图: 2 在需要窗体最小化到托盘的处理代码中,添加如下代码: if(this.WindowState==FormWindowState.Normal&&this.V

winform中设置FormBorderStyle为None后点击任务栏自动最小化实现

在winform编程中,有时候我们可能对窗体样式需要定义,不适用系统自带的样式,这样我们可以设置FormBorderStyle属性为None.但是设置了FormBorderStyle为None后,我们点击任务栏应用程序图标并不能实现程序的最小化的操作(使用系统自带样式是可以实现的).下面我将展示如何在FormBorderStyle为None的情况下,实现应用程序任务栏图标点击可实现最小化. 1.添加如下代码 [DllImport("user32.dll", EntryPoint = &