How to set QWebView content from QHelpEngineCore to enable CSS links?
-
If you could read the content of the css files you could then create a new file at any location insert the css content and set your own Url for the WebView. Bit of an overkill but I can't think of anything else. Sorry.
-
Unfortunately that is what I ended up doing, while it is working ok for now since I am only looking for a single css file; this approach will limit me when it comes to inserting other things, such as Images. :(
-
How does QHelpEngineCore store the file connected to a Url internally? Are the files stored in a Resource file, or are they actually stored at a specific location like maybe "..\QHelpEngineCoreInstallationDir\files\someFile.css" so you could map the QUrl provided by QHelpEngineCore to a representation you can use for your WebView.
-
They are stored in a sqlite database.
-
Can i bring this topic back to life?
I thought that with this code it would work:
@QByteArray helpData = m_helpEngine->fileData(url);
QByteArray styles = m_helpEngine->fileData(QUrl("qthelp://com.mynamespace/doc/styles/style.css"));
if(!helpData.isEmpty())
{
ui->webView->setStyleSheet(styles);
ui->webView->setHtml(helpData);
}@Even when using css inline in the HTML-file isn't working.
You would think the code above should give me a decent webpage with css.But no, even my second option isn't showing me anything.
-
the "setHtml(..)":https://qt-project.org/doc/qt-4.8/qwebview.html#setHtml function needs the Html as QString and to be able to load all the resources linked in the Html (e.g. the style sheet) you must provide the BaseUrl. If your Html has no stylesheet resource defined (<link rel="stylesheet" type="text/css" href="myStyleSheet.css">) you may need to add that to make it work.
Also the "setStyleSheet(..)":https://qt-project.org/doc/qt-4.8/qwidget.html#styleSheet-prop function is inherited from QWidget and is used to set the style for the widget (your WebView) and not the Html content of the WebView.Its just a shot in the dark and I haven't tried it myself, but maybe this will work:
@
QString myHtmlContent = QString( m_helpEngine->fileData(url) );
QUrl myBaseUrl = QUrl("qthelp://com.mynamespace/doc/styles")
if(!myHtmlContent.isEmpty())
{
ui->webView->setHtml(myHtmlContent, myBaseUrl);
}
@ -
It is showing me more (e.g. an icon where the image has to be) still no styles though.
This is what is in my head-tag in the html-file:
<link href="../style/styles.css" rel="stylesheet" type="text/css">my map-structure like this:
doc- images
- style
styles.css - ...
so the baseUrl should be right with:
@QUrl("qthelp://com.mynamespace/doc");@But doing nothing, are there maybe things QWebview can't display? Cause I even got problems loading a simple online webpage :s
-
If you have problems displaying images, this might result from missing plugins. You need to have the following structure in the directory your running your code from: plugins\imageformats\qjpeg4.dll ... and all the other plugins you need for the different image datatypes. You can find the plugins folder in your Qt folder.
I really don't know if the combination of qtHelp Urls and Html can work. Maybe you can try to find out more by using the "WebInspector":http://qt-project.org/doc/qt-4.8/qwebinspector.html for your WebPage.
-
I don't think I'm understanding you well.
I know where to find the plugins (and they are there), but do I need to put the dlls in my debug/release map or in my main projects folder? e.g. myapplication\debug\plugins\imageformats... or myapplication\plugins\imageformats...
It's a pitty you can't debug assistant, cause that is almost what i need. What it displays.
But it doens't seem to work in my QWebview. -
The idea with the plugins was just a guess. I think enabling the "QWebInspector":http://qt-project.org/doc/qt-4.8/qwebinspector.html is the first thing you should try.
-
And how can I use that? I never worked with QWebview (apart from this subject), let alone that I worked with QWebInspector.
I've tried to put create a QWebPage like:
@QWebPage *page = ui->webView->page();@
and a QWebinspector like so:
@QWebInspector *inspector = new QWebInspector;@when i try to set my page, nothing happens, my QWebPage is empty...
-
I haven't used the WebInspector myself but the documentation of it is pretty much selfexplanatory. After you have set the Html content for your WebView, you just need to get the WebPage pointer from the WebView, create the WebInspector and set the page for the WebInspector.
@
ui->yourWebView->setHtml(yourContent, yourBaseUrl);
QWebInspector *inspector = new QWebInspector(ui->yourWebView);
inspector->setPage(ui->yourWebView->page());
inspector->setVisible();
@
If this is not working, maybe you also need to set some settings to make it work (QWebSettings::DeveloperExtrasEnabled). Have a look at "QWebSettings":https://qt-project.org/doc/qt-4.8/qwebsettings.html this class also has a function called setUserStyleSheetUrl(..). -
Sorry if I have to bother you again:s
But nothing is happening. Even not showing the inspector anymore.And this is what i'm trying to do:
@QString myHtmlContent = QString(m_helpEngine->fileData(url));
QUrl myBaseUrl = QUrl("qthelp://com.mynamespace/doc");
if(!myHtmlContent.isEmpty())
{
// ui->webView->setContent(helpData, QString(), myBaseUrl);
ui->webView->setHtml(myHtmlContent, myBaseUrl);
}//QWebPage *page = ;
ui->webView->page()->settings()->DeveloperExtrasEnabled;
QWebInspector *inspector = new QWebInspector(ui->webView);
inspector->setPage(ui->webView->page());
inspector->setVisible(true);@[EDIT] It works: @ui->webView->page()->settings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);@
-
Do the style sheets and images also work now ?
-
Ok now that I got that, nothing seems to be loaded. No images, no stylesheets...
-
!http://wouterverbruggen.be/img/outcome.jpg(outcome)!
As you can see, no content is loaded (i think)
-
Maybe you can first test with a local Html file ,Css file and image and get that working and then proceed with the qHelp Urls. Just to pinpoint the error source.
Edit: Have you checked the QString holding the Html content?
-
That indeed could be a good idea, i'll keep you posted
-
With local files it works fine, it shows my pictures and the css i made.
I have checked the QString, it's filled with the code I programmed and stored in the QHelpEngine.
Could there be something wrong with my qch, qhc, qhcp or qhp files?I took as example the code from "Using Qt Assistant as a Custom Help Viewer":http://doc.qt.nokia.com/4.7-snapshot/assistant-custom-help-viewer.html
But I don't know if that was the best idea -
I'm really sorry but I have no experience in using the QHelpEngine and thus am unable to help you with anything related to this component. I fear the problem is that the qHelp Urls can not be used with Html, but this is just a guess. Is there maybe another way to display the help files other then using QWebkit?