Russian Qt Forum
Сентябрь 21, 2024, 20:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Свой плагин для QWebView  (Прочитано 2733 раз)
Vitto74
Гость
« : Апрель 04, 2011, 20:21 »

Пишу электронный учебник, в котором потребовалось вывести в QWebView аудио и видео без использования Flash.
Посмотрел как реализовано подключение Flash в Arora и набросал примерно такой класс
Код:
class WebPluginFactory : public QWebPluginFactory
{
Q_OBJECT
public:
    WebPluginFactory(QWidget *widgetParent, QObject *parent = 0);
    ~WebPluginFactory();

    QObject *create(const QString &mimeType, const QUrl &url, const QStringList &argumentNames, const QStringList &argumentValues) const;
    QList<QWebPluginFactory::Plugin> plugins() const;
    void refreshPlugins();
private:
    QWidget *widgetParent;
};

#include "videoframe.h"
#include "audioframe.h"

#include <QUrl>

WebPluginFactory::WebPluginFactory(QWidget *widgetParent, QObject *parent) :
    QWebPluginFactory(parent),
    widgetParent(widgetParent)
{
}

WebPluginFactory::~WebPluginFactory()
{
}

QObject *WebPluginFactory::create(const QString &mimeType, const QUrl &url, const QStringList &, const QStringList &) const
{
    if (mimeType == "application/book-video"){
        videoFrame *frame = new videoFrame(url.toString(), true, 0);
        connect(widgetParent, SIGNAL(destroyed(QObject *)), frame, SLOT(close()));
        return (QObject *)(frame);
    }
    if (mimeType == "application/book-audio"){
        audioFrame *frame = new audioFrame(url.toString(), false);
        connect(widgetParent, SIGNAL(destroyed(QObject *)), frame, SLOT(close()));
        return (QObject *)(frame);
    }
    return NULL;
}

QList<QWebPluginFactory::Plugin> WebPluginFactory::plugins() const
{
    MimeType mime;
    QWebPluginFactory::Plugin plug;
    QList<QWebPluginFactory::Plugin> rez;

    mime.name = "application/book-video";
    plug.mimeTypes.append(mime);
    rez.append(plug);

    mime.name = "application/book-audio";
    plug.mimeTypes.append(mime);
    rez.append(plug);

    return rez;
}

void WebPluginFactory::refreshPlugins()
{

}

Используется код так.
Код:
ui->webView->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
ui->webView->page()->setPluginFactory(new WebPluginFactory(ui->webView));

В принципе код работает и на месте
Код:
<object type="application/book-video" data="file://{путь к видео}"></object>

Появляется корректно работающий плеер, но при этом в консоль вываливается много мата
Код:
** (<unknown>:21467): DEBUG: NP_Initialize
** (<unknown>:21467): DEBUG: NP_Initialize succeeded
** (<unknown>:21467): DEBUG: NP_Initialize
** (<unknown>:21467): DEBUG: NP_Initialize succeeded
** (<unknown>:21467): DEBUG: NP_Initialize
** (<unknown>:21467): DEBUG: NP_Initialize succeeded
** (<unknown>:21467): DEBUG: NP_Initialize
** (<unknown>:21467): DEBUG: NP_Initialize succeeded
java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (6b20-1.9.7-0ubuntu1~10.04.1)
OpenJDK Client VM (build 19.0-b09, mixed mode, sharing)

Может я где-то допустил ошибку или написал что-то не так? Подскажите как исправить.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.09 секунд. Запросов: 20.