1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include "webview.h"
#include <QContextMenuEvent>
#include <QMenu>
#include <QWebEngineProfile>
#include <QWebEngineContextMenuData>
WebView::WebView(QWidget *parent, QStringList dictionaries)
: QWebEngineView(parent)
{
m_dictionaries = dictionaries;
}
void WebView::contextMenuEvent(QContextMenuEvent *event)
{
const QWebEngineContextMenuData &data = page()->contextMenuData();
Q_ASSERT(data.isValid());
//allow context menu on image
if (data.mediaType() == QWebEngineContextMenuData::MediaTypeImage) {
QWebEngineView::contextMenuEvent(event);
return;
}
// if content is not editable
if (!data.isContentEditable()) {
event->ignore();
return;
}
QWebEngineProfile *profile = page()->profile();
const QStringList &languages = profile->spellCheckLanguages();
QMenu *menu = page()->createStandardContextMenu();
menu->addSeparator();
QAction *spellcheckAction = new QAction(tr("Check Spelling"), nullptr);
spellcheckAction->setCheckable(true);
spellcheckAction->setChecked(profile->isSpellCheckEnabled());
connect(spellcheckAction, &QAction::toggled, this, [profile](bool toogled) {
profile->setSpellCheckEnabled(toogled);
});
menu->addAction(spellcheckAction);
if (profile->isSpellCheckEnabled()) {
QMenu *subMenu = menu->addMenu(tr("Select Language"));
for (const QString &dict : m_dictionaries) {
QAction *action = subMenu->addAction(dict);
action->setCheckable(true);
action->setChecked(languages.contains(dict));
connect(action, &QAction::triggered, this, [profile, dict,this](){
profile->setSpellCheckLanguages(QStringList()<<dict);
settings.setValue("sc_dict",dict);
});
}
}
connect(menu, &QMenu::aboutToHide, menu, &QObject::deleteLater);
menu->popup(event->globalPos());
}
|