2010-04-09 51 views
1

我们需要创建&销毁QApplication的实例,因为我们想要在插件中将Qt用于现有的主机应用程序。构造/破坏QApplication会导致QWebView弄乱HTML的渲染

void multiQT() 
{ 
    int argc = 0; 
    QApplication app(argc, NULL); 

    QWebView view; 
    view.setHtml("<html><head><title>Title</title></head><body><h1>Hello World</h1></body></html>"); 
    view.show(); 

    app.exec(); 
} 


main(int argc, char** argv) 
{ 
    // First call works fine, QWebView renders the HTML just fine 
    multiQT(); 

    // Second call fails, QWebView strips HTML tags from HTML text and 
    // and renders "TitleHello World" 
multiQT(); 
} 

当第二次显示QWebView时,它不会正确呈现HTML。我们是否需要在QApplication或QWebView中进行一些额外的(重新)初始化?

回答

1

你可能会遇到一些经过非常轻度测试的东西,其中QApplication对象创建/保存了部件的一些渲染上下文信息,我不认为它曾经有人计划过,把它重新放回去。当有人尝试你正在尝试做的事情时,可能会有一些静态内容不能正确重新初始化。

+0

我已经怀疑QApplication并不打算在单个进程中被破坏和构建。我希望有一种解决方法。感谢您的回答 – 2010-04-09 12:45:08

0

你应该只有1个QApplication对象,并且只有1个调用exec()。也许你应该试试这个。

QWebView * multiQT() 
{ 
    QWebView *view = new QWebView; 
    view->setHtml("<html><head><title>Title</title></head><body><h1>Hello World</h1></body></html>"); 
    view->show(); 

    return view; 
} 

main(int argc, char** argv) 
{ 
    QApplication app(argc, NULL); 

    QWebView * web0 = multiQT(); 

    QWebView * web1 = multiQT(); 

    app.exec(); 
} 
+0

感谢您的回答。你的解决方案有效,但那不是我所需要的。我在现有的插件应用程序中使用Qt。我真的需要动态地构建和销毁QApplication。 – 2010-04-09 12:36:04