Два потока с Qt, Awesomium и C++
Всем привет!
Столкнулся я с проблемой совмещения Qt и Awesomium, а если точнее, то с особенностью Qt. После инициализации главного окна Qt в функции main я выполняю инициализацию ядра Awesomium и загружаю страницу. И вот тут-то и подкралась проблема: GUI виснет во время загрузки страницы. То есть главный цикл Qt выполняется после цикла браузера. А мне нужно создать два потока для главного цикла Awesomium и Qt.
Читав документацию по Qt, я еще больше запутался. Пытаясь что-то сделать, испортил весь проект и повключал кучу библиотек. Прошу помочь сделать второй параллельный поток для главного цикла Awesomium и желательно использовать QThread, а не QTimer и слоты (с ними проблем больше потом будет).
Вот текущий код: algobinary.h
#ifndef ALGOBINARY_H
#define ALGOBINARY_H
#define WIDTH 1600
#define HEIGHT 1200
#define URL "https://www.goole.com/"
#include <QtGui/QMainWindow>
#include <QtGui/QApplication>
#include <Awesomium/WebCore.h>
#include <Awesomium/BitmapSurface.h>
#include <Awesomium/STLHelpers.h>
#include <QtCore/QTimer>
#include <QtCore/QThread>
#include "ui_algobinary.h"
using namespace Awesomium;
class AlgoBinary : public QMainWindow
{
Q_OBJECT
public:
AlgoBinary(QWidget *parent = 0, Qt::WFlags flags = 0);
~AlgoBinary();
private:
Ui::AlgoBinaryClass ui;
};
#endif // ALGOBINARY_H
algobinary.cpp
#include "algobinary.h"
AlgoBinary::AlgoBinary(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags)
{
ui.setupUi(this);
}
AlgoBinary::~AlgoBinary()
{
}
main.cpp
#include "algobinary.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
AlgoBinary w = new AlgoBinary();
w.show();
WebCore* web_core = WebCore::Initialize(WebConfig());
WebView* view = web_core->CreateWebView(WIDTH, HEIGHT);
//connect(m_timer,SIGNAL(timeout()),this,SLOT(poll()));
WebURL url(WSLit(URL));
view->LoadURL(url);
while(view->IsLoading())
{
web_core->Update();
}
BitmapSurface* surface = (BitmapSurface*)view->surface();
if (surface != 0)
{
surface->SaveToJPEG(WSLit("./result.jpg"));
}
return a.exec();
}
Всем заранее спасибо!