QtWebEngine vs QtWebKit context menu

  • Please bear with me if I am a touch uncertain about classes/terminology/behaviour here.

    I inherited an application (Qt 4) using QtWebKit and QWebView. It allowed "preview" of HTML document, which the user could edit in-place via QWebPage::setContentEditable.

    The first thing I did was to port this to Qt 5.7. I therefore changed over to using QtWebEngine and QWebEngineView, allowing the user to edit in-place via QWebEnginePage.runJavaScript("document.documentElement.contentEditable = true");.

    All this went fine, and seemed to give identical behaviour. However, it appears there is one facility missing which is required. I cannot go back to look at the old code behaviour, but I have been shown an old screenshot with a right-click content menu where the user could select some text and then choose a font for the selection via a Fonts sub-item with choices Bold, Italic, Underline. Presumably this then changed the HTML source over the selected text.

    The menu seemed to have items like: Cut, Copy, Paste, Select All, Fonts>, Direction>. The menu now, however, has only items: Copy, Unselect. Doubtless in part because it no longer "internally" supports setContentEditable.

    1. Am I correct in my description of this difference between QWebView vs QWebEngineView?

    2. I see no evidence in our code of any handling of the old or new context menus. Are these indeed inbuilt from the Qt side?

    3. I think I see we have QWebEngineView::contextMenuEvent so I can extend the context menu. I guess I need to roll my own to add something like font selection?

    4. Assuming I can get through #3, I am worried about how I would know where to put what into which. Presumably I want to do something like wrap the selected text inside, say, <b> & </b>. But the user is in "HTML editable-preview mode". Any "selection point coordinates" I might get back are going to point into "what is on the screen", not the underlying text of the HTML which is behind it? Will I have access to the corresponding HTML at the right "position", and will I be able to insert an HTML element entity like <b> or will something likely treat the insertion as literal text, e.g. actually inserting &lt;b&gt; which of course I don't want?

    I should really appreciate some guidance in this area, at least to indicate whether this is going to be possible. Thanks in advance.

Log in to reply

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.