如何在非Qt Windows应用程序中嵌入QtWebkit?

3

我希望在我的纯c windows GUI应用程序中嵌入qtwebkit。

有没有任何关于如何实现的示例代码或样本?还是这不可能?我知道在QT应用程序内部做这件事非常容易,但我想保持我的开发与C语言(可以使用免费的C编译器进行编译)。

(已经在谷歌上搜索了几天也没有找到任何有用信息。)

4个回答

2
截止QT4版本,所有小部件都需要一个已初始化且正在运行中的QApplication对象——该对象负责分派操作系统事件和QT事件以使QT小部件保持运行状态。
似乎有可能创建一个自定义子类QApplication,它将被实例化(以便QWebKit或其他小部件),使得单例存在,并从应用程序消息循环或者甚至仅从发送到窗口的计时器中调用它,并让它分派其队列中排队的任何QEvent。
我没有尝试过,但我也有类似的需求,在现有Windows应用程序中使用WebKit,而似乎只能使用QWebKit或this thing

好吧,这就是我试图做的...看看这个:http://www.qtforum.org/article/31506/embed-qwebview-into-win32-window-whole-window.html?highlight=(注意我不是一个好程序员 :-() - sonu
你在论坛帖子中的问题很简单——QWinWidget没有setCentralWidget方法。QWinWidget唯一有用的事情就是作为另一个部件的父部件。 因此,QWinWidget* win = new QWinWidget(parent); QWebView* web = new QWebView(win);应该可以让您在Windows窗口中托管您的Web视图。 - Chris Becke
好的,我已经完成了,但现在的问题是因为我正在创建一个小部件,所以我需要在DLL中创建一个QApplication实例。问题在于它会阻止Windows主机应用程序工作,因为QApplication启动了自己的消息循环。有什么帮助吗?谢谢。 - sonu
不幸的是,这才是难点:您需要查看QApplication,并可能创建一个派生自QApplication的QModelessApplication,该应用程序没有run方法,但具有CallMeFrequently()方法,您会经常调用它以执行QApplication :: run的内部循环逻辑,以确保QT事件正在被分发。我还没有做过这个。我仍然希望能够在没有Qt的情况下使WebKit工作。因此,我无法评论正确性和是否遵守LGPL条款。 - Chris Becke
我明白了...这就是为什么没有太多使用WebKit“简单方式”的例子...好吧,我会留给其他人想出解决方案...感谢你的帮助Chris。 - sonu

0

使用ActiveQt构建自己的ActiveX控件非常容易。然后将其嵌入。Qt甚至知道如何将IDispatch对象拉入其元对象系统,从而让您将它们暴露给JavaScript上下文。这真的非常棒。

我正在我的当前项目中完全这样做。我会尝试开源它,以节省其他人的工作,但不太可能被允许。


我很确定你的意思是使用ActiveQT可以嵌入Microsoft Internet Explorer?对吗?不用了,这意味着用户必须在计算机上安装IE或者用户必须自己安装它。而使用wxWebConnect,您可以分发整个Gecko软件包,而无需安装! - sonu

0

0

是的,那很不错,但它并不像wxWebConnect控件那样稳定。例如,尝试在Midori中打开Gmail或YouTube... - sonu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接