需要将应用程序带到Windows上的前景

需要将应用程序带到Windows上的前景,第1张

概述需要将应用程序带到Windows上的前景

我在windows上使用Qt开发了两个应用程序。 我希望用户能够在一个应用程序中按下一个button,使其他应用程序到达前台。 (程序使用qlocalsocket和命名pipe道进行通信。)

目前我正在使用Qt的QWidget :: activateWindow(),偶尔会将应用程序带到前台,但大多数时候它只是突出显示任务栏上的程序。

有人可以告诉我如何做到这一点,最好使用Qt,尽pipe如果使用WIN32 API会失败。

不幸的是,我只能用Qtfind一种方法。 我使用Chris Becke的build议从当前活动的应用程序中调用SetForegrounDWindow来解决这个问题。

如何阅读windows Phone 8.1中的Toast Notification属性?

windows上的GeoDjango:尝试在您的设置中设置GDAL_liBRARY_PATH

Git移动并提交与Bash匹配的所有目录

有没有办法在disableProcesswindowsGhosting之后重新打开windows重影function?

是否有一个“Mercurial通知程序”,告诉我什么时候外部存储库已经改变?

自定义向导控件

从相同的用户帐户的LocalServer32 EXE的COM激活是否共享现有的进程?

警告:运行命令“sh ./configure.win”的状态为127

windows上的PHP包含Zend Framework的path无效

在windows 8 HTML5应用程序中不能使用某些颜色

你确定这不是一个调试问题? 这个交易是,如果一个应用程序具有前景,则允许改变前景。

单击窗口A上的一个按钮将使窗口线程前景激活。 如果在另一个窗口上调用SetForegrounDWindow(或等价的),该窗口将被赋予前景。

另一方面,如果它只是发送一个消息给另一个应用程序,该应用程序尝试将自己置于SetForeground上,则会失败。 AllowSetForegrounDWindow用于需要授予“传统”应用程序权限的情况 – 由前台应用程序执行前台 *** 作。 再一次,AllowSet …只有在拥有当前活动前景窗口的线程中调用时才有效。

在QWidget::activateWindow方法的顶部,你应该调用QWidget::raise !

这就是这里所说的。

我也有类似的情况。

我有两个Qt应用程序,A和B,通过套接字进行通信。 我想通过应用程序A上的一个按钮来启动一个应用程序B的窗口。

我发现有时Widget的状态设置不正确,所以在我的应用程序B的Widget的event()函数中,我做了以下 *** 作:

bool MyWidgetB:event ( QEvent * e ) { QEvent::Type type = e->type (); // Somehow the correct state of window is not getting set,// so doing it manually if( e->type() == QEvent::HIDe) { this->setwindowstate(WindowMinimized); } else if( e->type() == QEvent::Show ) { this->setwindowstate((this->windowstate() & ~WindowMinimized) | WindowActive); } return QWidget::event(e); }

我正在从应用程序A发送一个命令到B.在接收到应用程序B之后,应用程序B自己调用以下函数:

voID BringUpWidget(QWidget* pWidget) { pWidget ->showMinimized(); // This is to bring up the window if not minimized // but beneath some other window pWidget ->setwindowstate(Qt::WindowActive); pWidget ->shownormal(); }

这适用于我,在windows XP上 ,与Qt 3.3。 我的MainWidget是从QWidget派生的。

我发现这也是一个从QMainWindow派生的小部件,但有一些问题。 就像其他孩子的窗户打开一样。

对于这种情况,我存储子窗口的位置并隐藏它们,然后使用BringUpWidget函数带入我的MainWindow小部件,然后恢复子窗口。

这是俗气,但它适用于我:

this->setwindowFlags(Qt::windowstaysOntopHint | Qt::FramelessWindowHint); this->show(); this->setwindowFlags(Qt::FramelessWindowHint); this->show();

或者,如果你没有其他的标志,

this->setwindowFlags(Qt::windowstaysOntopHint); this->show(); this->setwindowFlags(0); this->show();

windowstaysOntopHint几乎总是强制窗口前台。 之后,你并不是真的希望窗口始终保持在最前面,所以重新设置为之前的标志。

我认为你需要的API是AllowSetForegrounDWindow()和SetForegrounDWindow() 。 我不知道等价的Qt电话是什么。

使用shownormal()从图标化状态转换到可见状态。

总结

以上是内存溢出为你收集整理的需要将应用程序带到Windows上的前景全部内容,希望文章能够帮你解决需要将应用程序带到Windows上的前景所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1154864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存