Ескертпе: бұл оқулық ескірген. Qt5.6 нұсқасынан WebEngine пайдалану керек
Кім өз браузерімізді жазғысы келмейді? Браузер туралы ойларды жоққа шығармаңыз, олар, әрине, болды. Сонымен, Qt QWebView класы бар, ол хром жазылған webkit браузер қозғалтқышымен, сәйкесінше, chrome және басқа да көптеген браузерлермен жұмыс істеуге мүмкіндік береді. Сондықтан, іс жүзінде кодтың ондаған жолын қолдана отырып, сіз веб-сайт бетін көрсете алатын қолданба жасай аласыз.
Сонымен, қосымша келесі болады. Мекенжай жолағы QLineEdit және QWebView виджеті бар. Мекенжай жолағына сайт мекенжайын енгізіп, Enter* пернесін басқан кезде. * пернесі, сайт беті шығарылады және оны QWebView ішінде көрсетеді.** Беттегі сілтемені басқан кезде сілтеме мекенжайы мекенжай жолағында көрсетіледі және виджетте жаңа бет жүктеледі.
QWebView бағдарламасымен жұмыс істеуге арналған жоба құрылымы
- QWebViewExample.pro - жоба профилі;
- main.cpp - жобаның негізгі бастапқы код файлы;
- mainwindow.h - қолданбаның негізгі терезесінің тақырып файлы;
- mainwindow.cpp - қолданбаның негізгі терезесі үшін бастапқы код файлы;
- mainwindow.ui - қолданбаның негізгі терезесінің пішіні.
QWebViewExample.pro
QWebView бағдарламасымен жұмыс істеу үшін екі модульді қосу керек: webkit және webkitwidgets.
#------------------------------------------------- # # Project created by QtCreator 2015-12-18T20:10:57 # #------------------------------------------------- QT += core gui webkit webkitwidgets greaterThan(QT\_MAJOR\_VERSION, 4): QT += widgets TARGET = QWebViewExample TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui
mainwindow.h
Тақырып файлында екі ұяшықты жариялау қажет:
slotEnter() – браузердің мекенжай жолағындағы Enter пернесін басу арқылы өңдеу;
slotLinkClicked(QUrl url) – шолғыш бетіндегі сілтемені шертуді өңдеу үшін.
Сондай-ақ QWebView және QUrl кітапханаларын қосу қажет.
#ifndef MAINWINDOW\_H #define MAINWINDOW\_H #include <QMainWindow> #include <QtWebKitWidgets/QWebView> #include <QUrl> #include <QDebug> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q\_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; private slots: void slotEnter(); // Слот для обработки нажатия клавиши Enter void slotLinkClicked(QUrl url); // Слот для клика по ссылке на странице }; #endif // MAINWINDOW\_H
mainwindow.cpp
Сілтемені шертуді дұрыс өңдеу үшін setLinkDelegationPolicy әдісі арқылы осы оқиғаны қолмен өңдеуді орнату керек және сәйкес сигналға ұяшықты қосу керек. /87/) linkClicked().
#include "mainwindow.h" #include "ui\_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // Устанавливаем ручную обработку клика по ссылке ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks); // Подключаем сигнал нажатия "Enter" в поле lineEdit connect(ui->lineEdit, &QLineEdit::returnPressed, this, &MainWindow::slotEnter); // Подключиаем сигнала клика по ссылке к обработчику connect(ui->webView, &QWebView::linkClicked, this, &MainWindow::slotLinkClicked); } MainWindow::~MainWindow() { delete ui; } void MainWindow::slotEnter() { // Загружаем страницу по заданном URL в поле lineEdit ui->webView->load(QUrl(ui->lineEdit->text())); } void MainWindow::slotLinkClicked(QUrl url) { // При клике по ссылке помещаем адрес в поле lineEdit ui->lineEdit->setText(url.toString()); ui->webView->load(url); // Загружаем страницу по этой ссылке }
SSL көмегімен қателерді түзетіңіз
Жобаны құру кезінде сіз келесі түрдегі қателерге тап болуыңыз мүмкін:
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23\_client\_method qt.network.ssl: QSslSocket: cannot call unresolved function SSL\_CTX\_new qt.network.ssl: QSslSocket: cannot call unresolved function SSL\_library\_init qt.network.ssl: QSslSocket: cannot call unresolved function ERR\_get\_error
Бұл мәселенің шешімі Qt5Network.dll және Qt5Networkd.dll кітапханалары орналасқан қалтаға қажетті кітапханаларды тастау болып табылады. Бұл кітапханалар libeay32.dll және ssleay32. dll.
Осыған:
- келесі сайт өтіңіз
- Біз жеңіл құрастыруды OpenSSL іздейміз
- Және 32 немесе 64 биттің қажетті нұсқасын жүктеп алыңыз (mingw жағдайында 32 биттік жинақты жүктеп алыңыз).
- Содан кейін "OpenSSL екілік (\bin) каталогы" тармағын тексеру арқылы алынған қалтаға OpenSSL орнатыңыз.
- Содан кейін libeay32.dll және ssleay32.dll кітапханаларын іздеп, оларды Qt бар қалтаға Qt5Network.dll және Qt5Networkd.dll. кітапханаларына тасымалдаймыз.
Осыдан кейін жоғарыдағы қателер жойылады.
Барлығы
Жасалған жұмыстың нәтижесінде сіз келесі суретте көрсетілгендей сайт бетін өз қосымшаңызда аша аласыз. Сондай-ақ, сабақтан қосымшаның демонстрациясын бейне оқулықтан көруге болады.
Жобаны zip мұрағатында жүктеп алу сілтемесі: qwebviewexample.zip
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv23_client_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new
qt.network.ssl: QSslSocket: cannot call unresolved function SSL_library_init
qt.network.ssl: QSslSocket: cannot call unresolved function ERR_get_error
А если этот метод не помог,как быть?
Возможно, библиотеки не подошли. Либо попытаться подключить непосредственно в проект. Там на сайте должна быть dev версия вместе с заголовочными файлами. Вот эту версию в проект и подключать тогда.
Записал в .pro файле
не находит это и выдает ошибку:Unknown module(s) in QT: webkit webkitwidgets
скажите пожалуйста, почему так
Статья устарела, используйте QWebEngine
Сделал так
Выдает туже ошибку: Unknown module(s) in QT: webenginewidgets
Компилятор MinGW 64 5.12
Переходить на MSVC, ибо MinGW не поддерживается.
Компилятор MSVC 2015 64bit тоже выдает ту-же ошибку
А вот это уже странно. Перезапуск qmake делали? webengine установлен? Он идёт отдельным пунктом в Maintanence Tool
Проверил, Qt WebeEgine установлен. Запускал qmake.
На этом компе глюки с QML, может в этом дело?
Не думаю. Мне надо будет самому тогда проверить, как получится, отпишусь.
тоже проблемма Unknown module(s) in QT: webenginewidgets
Как быть ?
у меня Desktop Qt %{Qt:Version} clang 64bit -> на этом не покатит ? !
Была ли у вас возможность проверить WebeEgine?
Нет, у меня проблема с жёстким диском случилась, занимался восстановлением ПК, ещё пару вечеров придётся этим заниматься, увы.
Не повезло вам.
Проверьте пожалуйста QT += webenginewidgets и # include < QtWebEngineWidgets>
+
Такая же проблема Unknown module(s) in QT: webenginewidgets на Qt5.12.3 + VS2015
Оказалось, что 2015-й не поддерживает webenginewidgets, а с MSVC 2017 - работает!
Вроде вск записала правильно, все подключила . Проблем со сборко нет.
НО вместо сайта выводится белый экран просто. В чем проблема может быть?
По задумке, при нажатии на кнопку должен выводится сайт в qwebengineview
Если взяли все из примера, то не должно собраться, т.к. webkit webkitwidgets уже не работают.
Какой класс Вы используете для браузера?
я с учетом обновлений использовала webenginewidgets
я с учетом обновлений использовала webenginewidgets
И использовали QWebEngineView как виджет?
Попробуйте setUrl(const QUrl &url)