Qt通过句柄操作外部窗口

之前很长时间内用的都是MFC,后来VC的多线程与内存泄露让我焦头烂额,牵扯东西太多,于是乎,转战qt了。

编程过程中,不可避免要操作外部窗口,MFC中操作窗口用的都是CWND::fromHandle();

qt中操作外部窗口与CWND对应的是QWindow类。

    HWND hwndLogin=FindWindow(NULL,L"登录");
    QWidget* widgetLogin=QWidget::find((WId)hwndLogin);
 
    QWindow* windowLogin=QWindow::fromWinId((WId)hwndLogin);
    windowLogin->showFullScreen();

用上面的语句即可将相应句柄对应的窗口最大化显示。当然有不足的地方,比如调用title显示不了窗口的标题的,调用show方法,有时候不能把窗口提到顶层,取决于窗口状态,如果窗口是最小化的,show会将窗口提到最前面,否则没有变化的。。。。我还一度以为方法不好使。。。还是有坑啊。

另外,如果单纯想实现某些窗口的最大化、最小化、放在最前面,可以用API函数,原生态的,既快捷又安全。

    ::SetForegroundWindow(hwndSilver);

可以将窗口提到最上面。


用QWidget会报错,提示对应句柄的QWidget为空,但是用QWindow是可以的。

使用的是Qt 5.2版本,编译器是minGw。

关于这个知识点    就这样啦。。。

积极主动的人有更多的机会  :)

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Qt中,可以使用QProcess类来打开外部程序。QProcess类提供了一种启动外部程序的简单方式,并且还可以通过捕获程序的输出、错误信息以及监视程序的运行状态。 要打开外部程序,首先需要创建一个QProcess对象,并使用其start()方法来启动程序。可以将外部程序的路径作为start()方法的参数。启动成功后,可以使用waitForStarted()方法来检查程序是否已经成功启动。 要通过句柄操作外部窗口,可以使用QWindow类提供的功能。首先,需要获取外部窗口句柄,可以使用QProcess对象的processId()方法获取到正在运行程序的进程ID。然后,可以使用QWindow::fromWinId()静态函数将句柄换为QWindow对象。 一旦获取外部窗口的QWindow对象,就可以使用它提供的方法来操作窗口,比如调整窗口的大小、移动窗口的位置、最小化或最大化窗口等。例如,可以使用setWidth()和setHeight()方法来设置窗口的宽度和高度,使用setX()和setY()方法来设置窗口的位置等。 需要注意的是,操作外部窗口的能力可能会受到操作系统的限制,比如需要以管理员身份运行应用程序才能操作某些窗口。在使用QProcess打开外部程序并操作外部窗口时,需要确保对操作系统资源的访问权限。 综上所述,通过QProcess打开外部程序并通过句柄操作外部窗口的步骤包括:创建QProcess对象,使用start()方法打开外部程序,使用processId()方法获取程序的进程ID,使用fromWinId()方法将进程ID换为QWindow对象,调用QWindow提供的方法操作窗口
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值