2013-07-19 43 views
0

即時通訊使用Qt 5.0 + mingw來構建我的應用程序,我想使用「webkitwidgets」模塊。我在.pro文件中添加Qt QWebPage運行時C++錯誤

QT += webkitwidgets 

然後在我的代碼,我創建了一個線程,我的這個線程我寫道:

QWebPage page; 

當調試器到達這條線,我調試,出現以下錯誤終止:

「微軟的Visual C++運行時庫

此應用程序已請求運行時終止它非同尋常的方式 請聯繫申請更多信息請訪問支持團隊。「

所以我甚至不能聲明QWebPage類型的變量。爲什麼會發生這種情況,是否有解決問題的方法?

回答

1

當遇到像這樣的崩潰時,首先觀察stdout,stderr和調試通道,然後在調試器中運行它。

但是,正如你所說,你在一個線程中創建了QWebPage:這是行不通的。在Qt(以及幾乎所有其他的UI工具包)中,所有UI類必須位於主線程中,即一個QApplication所在的位置。將該聲明移至主線程,它應該可以工作。 另外,如果在應用程序退出之前程序塊沒有離開,那麼在棧上創建實例只是正確的(通常這只是main()中的情況)。否則,你必須在堆上創建它。

+0

我可以將創建的QWebPage傳遞給我的線程嗎?線程對象中的一些公共方法就像這樣'void setWebPage {QWebPage * p} {page = p; }' – SirLanceloaaat

+0

Btw即時通訊使用所有這些元素來解析HTML,我最好需要在一個線程中做到這一點。我沒有使用Dom,因爲它不會正確加載很多頁面(錯誤/編碼)。 – SirLanceloaaat

+0

不,Qt小部件不是線程安全的,因此直接在另一個線程中訪問它們將不起作用。 –