2017-11-10 21 views
1

QWebEngineView에 페이지를로드하는 간단한 Qt 애플리케이션이 있습니다. url에 "static"이라는 단어가있는 모든 http 요청을 로컬 파일로 리디렉션하고 싶습니다. WebUrlRequestInterceptor을 사용하여 interceptRequest 메소드를 다시 구현했습니다. 여기에 코드입니다 :QWebEngineUrlRequestInfo를 로컬 파일로 리디렉션하는 방법은 무엇입니까?

class MyWebUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor 
{ 
public: 
    void interceptRequest(QWebEngineUrlRequestInfo &info) { 
     if (info.requestUrl().toString().contains("static")) { 
      QString newUrl = QDir::currentPath() + info.requestUrl().toString().mid(21, info.requestUrl().toString().length()); 
      qDebug() << "new url = " << newUrl; 
      info.redirect(QUrl::fromLocalFile(newUrl)); 
     } 
    } 
}; 

주요 기능에서 내가

MyWebUrlRequestInterceptor *wuri = new MyWebUrlRequestInterceptor(); 
QWebEngineProfile::defaultProfile()->setRequestInterceptor(wuri); 

을했다 그리고 interceptRequest은 잘 작동하는 것 같다,하지만 난 메시지가 나타납니다.

지역 자원

내가 온라인 검색 나는 많은 사람들이 내가 --disable-web-security 플래그를 추가해야한다는 말을로드 할 수 없습니다. 그래서 내 .pro 파일에서 수행 :

QMAKE_CXXFLAGS += --disable-web-security 

그러나 작동하지 않는 것 같습니다. 내가 뭔가 잘못하고 있는거야? 다른 솔루션이 있습니까? 해결 방법으로 로컬 파일을 제공하고 Qt에서 리디렉션하도록 사용자 정의 프로토콜을 만들 수 있습니까?

나는 Qt는 5.9.1 및 QtCreator 4.3.1을 사용하고 있습니다.

답변

1

내가 QWebEngineUrlRequestInfo를 사용하여 요청 :: 블록을 차단하고 (심지어 QWebEngineView :: setHtml를 즉석에서 로컬 파일을 읽고 을 통해 뷰에 내용을 전달)을 QWebEngineView에 로컬 파일을로드 할 것 .

웹 루트로 로컬 디렉토리를 사용하여 들어오는 http 요청을 로컬에서 수신하고, 필요하면 외부 웹 서버를 사용하거나 최소한의 것을 구축하는 것을 의미하는 로컬 호스트로 리다이렉트 할 수 있습니다. 당신이 그것을 통합하기 위해가는 경우, 나는 이것을 고려할 것이다 : https://github.com/cesanta/mongoose. P-A-O-L-O @

+0

감사합니다! 이해할 수 있을지 모르겠다. 페이지에서 이미지를 묻는다면'setHtml'을 통해 어떻게로드 할 수 있습니까? – madasionka

+0

파일 내용이 html이 아닌 경우 제안 된대로 로컬 웹 서버를 사용하는 것이 좋습니다. 하나를 임베드하려고 시도하기 전에 노드 1 (https://expressjs.com)에 있다면 외부 솔루션을 사용하여이 솔루션을 테스트 할 수 있습니다. –