Qt助手:如何最大化帮助窗口,在QT-Assistant中作为进程启动

时间:2014-09-25 23:22:50

标签: c++ qt

QT4.8

您好, 我使用QProcess架构连接到QT-Assistent。

例如(来自QT doc)

QProcess *process = new QProcess;
QStringList args;
args << QLatin1String("-collectionFile")
     << QLatin1String("mycollection.qhc")
     << QLatin1String("-enableRemoteControl");
process->start(QLatin1String("assistant"), args);
if (!process->waitForStarted())
    return;

我正在使用建议的文档将命令传递给它:

 QByteArray ba;
 ba.append("setSource qthelp://com.mycompany.1_0_0/doc/index.html\n");
 process->write(ba);

我的问题:

如果用户最小化它,如何最大化帮助窗口? 由于帮助是以不同的进程运行的,所以没有找到一种方法来启动窗口。

TIA。

1 个答案:

答案 0 :(得分:1)

如果启动另一个进程,则需要使用Windows的操作系统特定管理工具。

您可以在创建流程时获取窗口ID,但管理其窗口是特定于平台的。

Qt并没有让其应用程序范围跨平台进行完全shell访问,但以下是在Windows中执行此操作的方法:

http://qt-project.org/doc/qt-5/qprocess.html#processId

http://forums.codeguru.com/showthread.php?353149-How-to-Get-windows-Handle-using-Process-Id

https://stackoverflow.com/a/10258861/999943

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633548(v=vs.85).aspx

#include <windows.h>

//...

HWND h = ::GetTopWindow(0 );
{
  DWORD pid;
  DWORD dwTheardId = ::GetWindowThreadProcessId( h,&pid);

         if ( pid == process->processId() )
         {
              // here h is the handle to the window
              break;
         }
         h = ::GetNextWindow( h , GW_HWNDNEXT);
}

::SetForegroundWindow(h);

::ShowWindow(h, SW_SHOWMAXIMIZED);

希望有所帮助。