Qt主窗体显示最前

在delphi中使用Application.BringToFront;可以保证当前程序显示在最前。

然而今天在Qt中,没有类似函数供调用。

尝试了activeWindow,show,showNormal,showMaximized 等函数还是不行。

网上有方法设置窗体的windowFlags,具体方法为:

pMainForm->setWindowFlags(pMainForm->windowFlags() | Qt::WindowStaysOnTopHint);
pMainForm->showNormal();

但是该代码会导致该窗体霸道的总是在最前,无法切换到诸如浏览器等其他应用。即使再设置如下代码:

pMainForm->setWindowFlags(pMainForm->windowFlags() & ~Qt::WindowStaysOnTopHint);
pMainForm->showNormal();

也不能取消“总在最前”这个状态。

其实我就是想要其显示在最前面而已,最后想到用windows消息,模拟windows切换任务栏,但无奈不清楚windows是如何发送该消息的。

经过网上搜查,如下代码即可解决,将窗口显示到最前的效果,且无其他副作用:

if (pMainForm->isMinimized())
{
    pMainForm->showNormal();
}
//设置窗口置顶
::SetWindowPos(HWND(pMainForm->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
::SetWindowPos(HWND(pMainForm->winId()), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);                   

pMainForm->show();
pMainForm->activateWindow();

如果只设置 HWND_TOPMOST ,就会又出现总是在最前的情况。

参考:http://forum.qt.io/topic/6032/bring-window-to-front-raise-show-activatewindow-don-t-work-on-windows

时间: 2024-10-12 19:58:40

Qt主窗体显示最前的相关文章

QT主窗体半透明实现

QT主窗体透明实现: 1)添加setWindowFlags(windowFlags() | Qt::FramelessWindowHint); 2)添加setAttribute(Qt::WA_TranslucentBackground, true); 3)重写paintEvent事件 备注: 三者缺一不可 1)当没有设置Qt::WA_TranslucentBackground属性为true时,会发现没有半透明透明效果. 2)当窗体属性没有设置无边框属性,也就是Qt::FramelessWindo

传窗体(例子是点完修改页面的修改后,直接在主窗体显示修改后的内容,不用再点一次查询)

private void button3_Click(object sender, EventArgs e) { if(listView1.SelectedItems.Count>0) { string x = listView1.SelectedItems[0].Text; supdate f = new supdate(this,x); //this是当前窗体,就是主窗体 f.Show(); } } private Score Y; private string X; public supd

传窗体 点完修改页面的修改后,直接在主窗体显示修改后的内容

private void button3_Click(object sender, EventArgs e) { if(listView1.SelectedItems.Count>0) { string x = listView1.SelectedItems[0].Text; supdate f = new supdate(this,x); //this是当前窗体,就是主窗体 f.Show(); } } private Score Y; private string X; public supd

C# Winform 登陆窗体跳转到主窗体,登陆窗体隐藏

不多说,直接上代码: //Login窗体隐藏 Login.Hide(); //声明主窗体 Main main = new Main(); //主窗体显示 main.ShowDialog(); //Login窗体关闭 this.Close(); 菜鸟整理,大虾勿喷,希望大虾不吝指教.

qt系统托盘显示、无主窗体

系统图盘是应用程序经常用到的一个控件,当应用程序需要长时间存在的时候,这个控件会变得非常有用,比如,窗口隐藏,显示,关于.关闭等接口都可以放在图盘中处理,今天与到一个问题,需求是这样的:只需要显示图盘,不需要主窗口,提示信息需要动态的改变 看似很简单的一个问题,我自己试了试之后,也倒腾了好一会儿,先看我的第一版程序,代码如下 1 QSystemTrayIcon *tc = new QSystemTrayIcon; 2 3 tc->setToolTip(QStringLiteral("消息提

WinForm 之 程序启动不显示主窗体

在 WinForm 程序启动时,不显示主窗体的实现方法主要有以下5种,第五种最简单,而且效果也不错,第四种方法也值得推荐. 实例代码如下: //隐藏窗体的方法1/5:不指定任何窗体为主窗体 //注意:通常,在一个程序中,关闭主窗体,就可以关闭应用程序. //但是在没有主窗体中,不行. //只能使用Application.Exit()才能关闭应用程序. //using可以保证Application结束前,关闭MyMainForm using (new Form1()) { Application.

非主窗体在任务栏显示按钮(简单好用)good

非主窗体在任务栏显示按钮 type TForm2 = class(TForm) private { Private declarations } public { Public declarations } procedure CreateParams(var Params:TCreateParams); override; end; ... procedure TForm2.CreateParams(var Params: TCreateParams); begin inherited Cre

Delphi中主窗体的formshow事件在程序自动创建窗体对象前就调用的错误。

这个,实际我也不知道这个标题该怎么写.因为用一句话描述错误有点困难. 下面用代码来说明吧. 最近做了一个delphi的程序,按照我的习惯一般是先创建一个窗体作为主窗体,其他的窗体都在这个基础上显示.另外,由于使用了数据库,所以添加了一个TDataModule控件,便于一些不能防止控件的单元进行数据库操作.把其他所有的窗体都设置为非自动创建.然后通过application.createform方法进行动态创建和调用. 好了,问题出现了. 在工程文件中有如下代码: Application.Creat

QT 全屏显示子窗口

QT 中全屏显示子窗口的方法 QT 中窗口部件 QWidget 成员函数 showFullScreen();是用于将窗口部件全屏显示 但是他只对窗口模式的部件有用.子窗口的特征是 Qt::SubWindow不是独立的窗 口.因此对其调用 showFullScreen无效.通过对子窗口调用setWindowFlags Qt: :Dialog或 setWindowFlagsQt::Window将其设为窗口模式后即可 调用 showFullScreen();进行全屏显示了. 相对于子窗口的全屏显示方法