我在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上的前景所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)