Как подключить Webkit в Qt 5.3.0?

Пытаюсь с помощью webView отобразить сайт:
void MainWindow::on_pushButton_clicked()
{
    ui->webView->load(QUrl("http://www.trolltech.com/"));

}


На выходе получаю ошибки:
13:53:45: Starting: "/usr/bin/make" 
g++ -Wl,-rpath,Qt5.3.0/5.3/gcc_64 -Wl,-rpath,/home/fenixsar/Qt5.3.0/5.3/gcc_64/lib -Wl,-rpath-link,Qt5.3.0/5.3/gcc_64/lib -o brouser main.o mainwindow.o moc_mainwindow.o   -L./Qt5.3.0/5.3/gcc_64/lib -lQt5WebKit -lQt5Widgets -lQt5Network -lQt5Gui -lQt5Core -lGL -lpthread 
mainwindow.o: In function `MainWindow::on_pushButton_clicked()':
/Qt5.3.0/Tools/QtCreator/bin/build-brouser-Desktop_Qt_5_3_0_GCC_64bit-Debug/../brouser/mainwindow.cpp:27: undefined reference to `QWebView::load(QUrl const&)'
mainwindow.o: In function `Ui_MainWindow::setupUi(QMainWindow*)':
/Qt5.3.0/Tools/QtCreator/bin/build-brouser-Desktop_Qt_5_3_0_GCC_64bit-Debug/./ui_mainwindow.h:40: undefined reference to `QWebView::QWebView(QWidget*)'
/Qt5.3.0/Tools/QtCreator/bin/build-brouser-Desktop_Qt_5_3_0_GCC_64bit-Debug/./ui_mainwindow.h:43: undefined reference to `QWebView::setUrl(QUrl const&)'
collect2: error: ld returned 1 exit status
make: *** [brouser] Error 1
13:53:45: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project brouser (kit: Desktop Qt 5.3.0 GCC 64bit)
When executing step 'Make'
13:53:45: Elapsed time: 00:00.


Файл проекта:
QT       += core gui webkit network

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = brouser
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui


Пробовал подключить различные библиотеки:
#include <QtWebKitWidgets/QWebView>
#include <QtWebKit>

Кстати, вот эту он не может найти:
#include <QWebView>
Хотя в справке написано, что должна присутствовать именно она.
  • Вопрос задан
  • 9550 просмотров
Пригласить эксперта
Ответы на вопрос 1
EXL
@EXL
Энтузиаст
Пробовал подключить различные библиотеки:
#include
#include
Во-первых, а кто вам сказал, что таким образом подключаются библиотеки в C++? Так только подключаются объявления классов и их методов. Библиотеки вы таким образом к проекту не подключите и следовательно получите закономерную ошибку линковки "undefined reference to ...". Это полностью логично, поскольку объявления вы подключили, а их реализацию - нет. Кстати, эти строки вам вообще не нужны, удалите их, они не возымеют должного эффекта, поскольку уже есть в "ui_MainWindow.h", откройте этот файл и изучите его заголовок.

Во-вторых, вы используете слишком старую документацию, видимо, ещё для Qt 4, хотя пользуетесь Qt 5. Это заметно по:

http://www.trolltech.com/
и по:

#include <QWebView>
без префикса. Обновите вашу документацию на актуальную или поставьте Qt 4. Qt 5 был разбит на множество частей, Qt 4 более монолитен. Поэтому WebView вынесли в Qt 5 в отдельную библиотеку webkitwidgets.

В-третьих, сайт www.trolltech.com давно мертв.

В вашем случае для получения полностью работоспособного приложения следует в *.pro файле определить:

QT += core gui webkit webkitwidgets
и убрать:

#include <QtWebKitWidgets/QWebView>
#include <QtWebKit>

Оттуда, куда вы это сами вставили.

Полностью рабочее приложение, компилирующееся на Qt 5 будет выглядеть как-то так:

project.pro:
#-------------------------------------------------
#
# Project created by QtCreator 2014-06-09T02:41:10
#
#-------------------------------------------------

QT       += core gui webkit webkitwidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = untitled3
TEMPLATE = app


SOURCES += main.cpp\
        MainWindow.cpp

HEADERS  += MainWindow.h

FORMS    += MainWindow.ui

main.cpp:
#include "MainWindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

private slots:
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H

mainwindow.cpp:
#include "MainWindow.h"
#include "ui_MainWindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    ui->webView->setUrl(QUrl("http://www.habrahabr.ru"));
}

Удачи!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы