2013-07-19 2 views
0

메신저 내 응용 프로그램을 빌드하는 데 Qt 5.0 + mingw를 사용하고 "webkitwidgets"모듈을 사용하고 싶습니다. 나는Qt QWebPage 런타임 C++ 오류

QT += webkitwidgets 

그럼 내 코드에서 내가 스레드를 생성 .PRO 파일에 추가 i를 내가 쓴이 스레드 : 디버거가이 선에 도달 할 때

, 내 디버그 다음과 같은 오류와 함께 종료

QWebPage page; 
:.

"의 Microsoft Visual C++ 런타임이 응용 프로그램은 그것을 비정상적인 방법으로 종료 할 런타임을 요청했습니다

라이브러리 은 APPL 문의하시기 바랍니다 더 많은 정보를 원할 것 "이라고 밝혔다.

그래서 QWebPage 유형의 변수를 선언 할 수 없습니다. 왜 이런 일이 일어나고 그것을 고칠 수있는 방법이 있습니까?

답변

1

이렇게 충돌이 발생하면 stdout, stderr 및 디버그 채널을보고 디버거에서 실행하십시오.

그러나 스레드에서 QWebPage를 만들었다 고해서 : 작동하지 않습니다. Qt (및 거의 모든 다른 UI 툴킷)에서 모든 UI 클래스는 주 스레드, 즉 하나의 QApplication이 살고 있어야합니다. 선언을 주 스레드로 옮기면 작동합니다. 또한 응용 프로그램이 종료되기 전에 블록이 남아 있지 않으면 스택에 인스턴스를 만드는 것이 옳습니다 (일반적으로 main()에만 해당). 그렇지 않으면 힙에 작성해야합니다.

+0

작성한 QWebPage를 내 스레드로 전달할 수 있습니까? 이 같은 스레드 객체의 일부 public 메소드'void setWebPage {QWebPage * p} {page = p; } ' – SirLanceloaaat

+0

Btw 메신저 html을 파싱하기 위해이 모든 요소를 ​​사용하고 스레드에서이 작업을 수행해야합니다. 나는 많은 페이지를 올바르게로드하지 않기 때문에 (오류/인코딩) 돔을 사용하지 않았습니다. – SirLanceloaaat

+0

아니요, Qt 위젯은 스레드로부터 안전하지 않으므로 다른 스레드에서 직접 액세스 할 수 없습니다. –