找回密码
 立即注册
收起左侧

QProcess启动起来的界面怎么设置成子窗口

12
回复
13140
查看
[复制链接]
累计签到:410 天
连续签到:1 天
来源: 2013-5-20 19:41:41 显示全部楼层 |阅读模式
1Qter豆
如题。
我本来想实现一个功能:
我把我的主程序设置成 显示到最前端(主要是防止其他程序出现),
但是程序中会启动其他程序,怎么把启动起来的这个程序作为我的子窗口,这样就可以显示出来了……

或者有没好的方法实现我这个功能。

最佳答案

查看完整内容

我知道你的意思,我的意思是说,比如下面的代码: MainWindow w; QProcess pro; pro.start("notepad.exe"); w.show(); 那么记事本一定是在W窗口前面显示的; 但是如果这样: MainWindow w; w.setWindowFlags(Qt::WindowStaysOnTopHint); QProcess pro; pro.start("notepad.exe"); w.show(); 这里将w窗口设置为了顶层窗口,那么记事本不可能在W前面显示。 ...
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2013-5-20 19:41:42 显示全部楼层
a408815041 发表于 2013-5-21 17:49
不是子窗口,只是启动其他程序,如果是子窗口的话,才有可能在他前面显示 ...

我知道你的意思,我的意思是说,比如下面的代码:   
MainWindow w;

QProcess pro;
pro.start("notepad.exe");

w.show();

那么记事本一定是在W窗口前面显示的;

但是如果这样:
    MainWindow w;
    w.setWindowFlags(Qt::WindowStaysOnTopHint);

    QProcess pro;
    pro.start("notepad.exe");

     w.show();
这里将w窗口设置为了顶层窗口,那么记事本不可能在W前面显示。
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2013-5-20 20:54:34 显示全部楼层
如果你启动的那个也是Qt写的程序,好像还有办法,如果是其他程序,不太好实现吧。
回复

使用道具 举报

尚未签到

2013-5-20 23:03:16 显示全部楼层
如果是在linux下的话可以通过dbus实现,其它我就不会了
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2013-5-21 10:53:48 显示全部楼层
yafeilinux 发表于 2013-5-20 20:54
如果你启动的那个也是Qt写的程序,好像还有办法,如果是其他程序,不太好实现吧。 ...

有C#、VC写的,肿么办………………
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2013-5-21 10:58:23 显示全部楼层
a408815041 发表于 2013-5-21 10:53
有C#、VC写的,肿么办………………

这个应该没有什么好办法吧,如果你把主程序设置为顶层窗口,那么他调用的程序,不是显示在它上面吗?如果不是,那只能改主程序的位置了。
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2013-5-21 17:49:00 显示全部楼层
yafeilinux 发表于 2013-5-21 10:58
这个应该没有什么好办法吧,如果你把主程序设置为顶层窗口,那么他调用的程序,不是显示在它上面吗?如果 ...

不是子窗口,只是启动其他程序,如果是子窗口的话,才有可能在他前面显示
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2013-5-22 11:02:36 显示全部楼层
yafeilinux 发表于 2013-5-21 19:41
我知道你的意思,我的意思是说,比如下面的代码:   
MainWindow w;

我想问下,如果我在启动的时候,我把这个标志位取消,然后等这个进程结束后,我在把这个标志位 加上,
这样应该可以吧,那怎么检查这进程是否结束?难道用
while(1)
pro.finished();
去判断?
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2013-5-22 13:16:40 显示全部楼层
a408815041 发表于 2013-5-22 11:02
我想问下,如果我在启动的时候,我把这个标志位取消,然后等这个进程结束后,我在把这个标志位 加上,
这 ...

进程结束的时候会发射finished(int)信号!
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2013-5-22 13:48:12 显示全部楼层
yafeilinux 发表于 2013-5-22 13:16
进程结束的时候会发射finished(int)信号!

我意思就是 可以这样 做对吧……
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2013-5-22 17:51:58 显示全部楼层
a408815041 发表于 2013-5-22 13:48
我意思就是 可以这样 做对吧……

你可以试一下啊!看是否能达到想要的效果。
回复

使用道具 举报

累计签到:1100 天
连续签到:1 天
2014-11-11 17:33:55 显示全部楼层
哪将弹出的记事本阻塞到当前窗口怎么实现啊?就是只能操作当前弹出的界面,你的主界面是动不了的?
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2014-11-12 11:39:35 显示全部楼层
crazylq 发表于 2014-11-11 17:33
哪将弹出的记事本阻塞到当前窗口怎么实现啊?就是只能操作当前弹出的界面,你的主界面是动不了的? ...


pro : LIBS += -luser32
#include <Windows.h>
备注:好像只能在QMainWindow类下面操作,我在QWidget下未成功。
QString Name = "notepad";
HWND SimpackWnd = FindWindow((LPCTSTR)Name.unicode(),NULL);
if(SimpackWnd != NULL)
  { SetParent(SimpackWnd,(HWND)(this->winId())); }

可以吧记事本嵌入到界面里面去。我测试环境是在win7下,测试成功了。
你在写这段代码的时候,必须先把记事本打开。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了