在 qwidget 中运行外部应用程序

Posted

技术标签:

【中文标题】在 qwidget 中运行外部应用程序【英文标题】:Run an external application inside a qwidget 【发布时间】:2012-10-01 19:09:25 【问题描述】:

我们如何在 QWidget 中嵌入外部应用程序?

我使用 QX11EmbedContainer 尝试过同样的操作,但收到错误“XEvent has not been declared”。

我已经尝试过下面提到的代码('this' 代表一个 qwidget 类引用)

     QX11EmbedContainer * container = new QX11EmbedContainer(this);
     container->show();

     QProcess * process = new QProcess(container);
     QString executable("\"C:\\Program Files\\Windows Media Player\\wmplayer.exe\"");

     process->start(executable);

     this->show();

我正在尝试将容器对象添加到我想在其中运行一些外部应用程序(Application1)的 tabwidget 对象的当前选项卡。 这是我的代码

     QTabWidget *tabWidget = new QTabWidget;

     /* Trying to add external appllication to a tab of tabwidget object */
     QX11EmbedContainer * container = new QX11EmbedContainer(tabWidget->currentWidget());
     container->show();

     QProcess * process = new QProcess(container);
     QString executable("/home/abhishek/practice/Applicaion1");

     process->start(executable);

Application1 被执行但在一个单独的窗口中,但我希望它在我的选项卡中运行

【问题讨论】:

QX11EmbedContainer 用于 XWindows。 【参考方案1】:

QX11EmbedContainer 仅适用于 X11(例如,在 Linux 上)。从外观上看,您正在尝试在 Windows 上执行此操作。

我对在 Windows 上使用 Qt 不是很熟悉,但看起来 ActiveQt 模块提供了等效的功能。您也许可以在该框架内完成类似的事情。

【讨论】:

我也在 Linux (RHEL 6) 上尝试过相同的方法,但它不起作用。在 linux 中,我给出的路径是 QString executable("/home/abhishek/practice/Applicaion1");当我运行我的代码时,Application1 从我当前的应用程序中执行,但它在单独的窗口中运行。我希望它嵌入到我当前的 QWidget 中。 我明白了。然后听起来您上面的代码示例不完整-您如何处理container 小部件?它看起来不像是添加到布局中或作为现有小部件的子级,这就是它会出现在自己的窗口中的原因。 我已经找到了解决方案。感谢您的帮助 我有同样的问题,我还需要在 qwidget 中运行一个外部应用程序 - cvan 你请分享我你的方法是什么? @Abhishek:您能否分享您的解决方案,或提供一些建议?我有类似的要求,要在 tabwidget 中启动基于 CLI(命令行界面)的可执行文件。我可以将它作为一个单独的进程在一个单独的窗口中启动,但是将它放在 QTabWidget 中会非常好。你能帮忙吗?谢谢

以上是关于在 qwidget 中运行外部应用程序的主要内容,如果未能解决你的问题,请参考以下文章

QT下的QProcess调用外部程序

尝试从外部脚本更新进度条时,QWidget 变得无响应[重复]

“必须在 QWidget 之前构建 QApplication”

必须在传递给 C 运行时函数的 QWidget 和无效参数之前构造一个 QApplication

如何将 QWidget 添加到 QMenuBar?

Qt QWidget 多实例