Qter 发表于 2018-4-16 14:01:17

Qt 在Linux下播放flash (swf文件)

windows下有activex控件
linux下好像没有,用QWebveiw显示


QWebView与flash交互QWebSettings *websetting = QWebSettings::globalSettings();
websetting->setAttribute(QWebSettings::PluginsEnabled, true);
websetting->setAttribute(QWebSettings::JavaEnabled, true);
    QString str("file:///home/homisunit/flash/AvrDefault.swf");
    QUrl url(str);
    ui->webView->load(url);
    ui->webView->show();
用Qt5.5.1,同时有QtWebkit和QtWebEngine,官方预编译包还能支持XP系统
Qt5.6后没有QtWebkit了,官方预编译包也不支持XP系统,需要支持XP,自己编译。

Qter 发表于 2018-5-15 15:01:02

本帖最后由 Qter 于 2018-5-15 16:45 编辑

minGW编译器不支持webenginewidgets模块

Qt webkitwidgets模块和webenginewidgets模块
问题
将Qt开发的程序从Qt5.5或更低的版本迁移到5.6或更高的版本时,会提示webkitwidgets是unknown module。
Project ERROR: Unknown module(s) in QT: webkitwidgets

原因
根据Qt官方的解释(在Qt的帮助文档里也可以看到),在5.6版本以及之后的版本,Qt已经移除了webkitwidgets模块,并用一个新的模块webenginewidgets替代之。
Qt5.5.1是最后一个支持webkitwidgets的版本。

解决
Qt给出了向高版本迁移的文档:Porting from Qt WebKit to Qt WebEngine
在.pro文件中,如果要区分不同的Qt版本,可以这么写:

lessThan(QT_VERSION, 0x050600)
{
QT += webkitwidgets
# do something else
}
greaterThan(QT_VERSION, 0x050500)
{
QT += webenginewidgets
# do something else
}


greaterThan(QT_MAJOR_VERSION, 4)|equals(QT_MAJOR_VERSION,4){
    greaterThan(QT_MINOR_VERSION, 5)|equals(QT_MINOR_VERSION, 5){   
    message("bla,bla,bla ....")   
    }   
}else{   
    message("pla,pla,pla ....")   
}

Qter 发表于 2018-5-15 15:04:00

本帖最后由 Qter 于 2018-5-15 15:17 编辑

QWebEngineView 播放flash基于Qt5.8.0
修改QTWebEngineDemo.pro添加框架依赖
QT       += core gui webenginewidgets

#include <QtWebEngineWidgets>

QWebEngineSettings *defaultSettings = QWebEngineSettings::globalSettings();
//    defaultSettings->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
//    defaultSettings->setAttribute(QWebEngineSettings::ScrollAnimatorEnabled, true);
defaultSettings->setAttribute(QWebEngineSettings::PluginsEnabled, true);
//    defaultSettings->setAttribute(QWebEngineSettings::FullScreenSupportEnabled, true);
QWebEngineView * view = new QWebEngineView();
view->setUrl(QUrl("http://www.firemail.wang:8088/chunhui_resource/preschool/letters/a.swf"));
view->show();

Qter 发表于 2018-5-15 17:19:19

MAJOR

    MAJOR表示当前APR的主版本号,它的变化通常意味着APR的巨大的变化,比如体系结构的重新设计,API的重新设计等等,而且这种变化通常会导致APR版本的向前不兼容。
    2、MINOR
    MINOR称之为APR的次版本号,它通常只反映了一些较大的更改,比如APR的API的增加等等,但是这些更改并不影响与旧版本源代码和二进制代码之间的兼容性。
    3、PATCH
    PATCH通常称之为补丁版本,通常情况下如果只是对APR函数的修改而不影响API接口的话都会导致PATCH的变化。目前为止APR的最高版本是1.2.2,最早遵循这种规则的版本号是0.9.0,不过在0.9.0之前,APR还推出了两个版本a8和a9。

Qter 发表于 2018-5-15 17:44:48

.proequals(QT_MAJOR_VERSION, 5)
lessThan(QT_MINOR_VERSION, 7): QT += webkitwidgets


equals(QT_MAJOR_VERSION, 5)
greaterThan(QT_MINOR_VERSION, 7): QT += webenginewidgets.h#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0))
#include <QtWebEngineWidgets>
#else
#include <QWebView>
#include <QWebSettings>
#endif


#if QT_VERSION >= 0x050700
    QWebEngineView * engineView;
#else
    QWebView* webView;
    QWebSettings *websetting;
#endif
.cpp#if (QT_VERSION >= QT_VERSION_CHECK(5, 7, 0))
#include <QWebEngineSettings>
#endif



#if QT_VERSION >= 0x050700
    QWebEngineSettings *defaultSettings = QWebEngineSettings::globalSettings();
    defaultSettings->setAttribute(QWebEngineSettings::PluginsEnabled, true);
    engineView= new QWebEngineView(ui->page);
    mainLayout->addWidget(engineView);
    engineView->setUrl(QUrl("http://www.firemail.wang:8088/chunhui_resource/preschool/letters/a.swf"));//
    engineView->show();
#else
    websetting = QWebSettings::globalSettings();
    websetting->setAttribute(QWebSettings::PluginsEnabled, true);
//      websetting->setAttribute(QWebSettings::JavaEnabled, true);
    websetting->setAttribute(QWebSettings::JavascriptEnabled, true);
    websetting->setAttribute(QWebSettings::DeveloperExtrasEnabled, true);//
    websetting->setAttribute(QWebSettings::JavascriptCanOpenWindows, true);
    webView= new QWebView(ui->page);
    mainLayout->addWidget(webView);
    webView->load(QUrl("http://www.baidu.com"));//
    webView->show();
#endif
页: [1]
查看完整版本: Qt 在Linux下播放flash (swf文件)