2010-04-09 35 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

相關問題