• QAxWidget 妙用


    QAxWidget类是一个包装ActiveX控件的QWidget。
    QAxWidget可以实例化为空对象,它应该包含ActiveX控件的名称,或者使用指向ActiveX控件的现有接口指针。仅使用QAxBase支持的数据类型的ActiveX控件的属性,方法和事件可用作Qt属性,插槽和信号。基类QAxBase提供了一个API,可以通过IUnknown指针直接访问ActiveX。
    QAxWidget是一个QWidget,大部分都可以这样使用,例如它可以在窗口小部件层次结构和布局中组织,也可以充当事件过滤器。标准小部件属性,例如支持启用,但它依赖于ActiveX控件来实现对环境属性的支持,例如调色板或字体。 QAxWidget尝试提供必要的提示。
    但是,您无法重新实现特定于Qt的事件处理程序,如mousePressEvent或keyPressEvent,并期望可靠地调用它们。嵌入式控件完全覆盖了QAxWidget,通常处理用户界面本身。使用特定于控件的API(即监听控件的信号),或使用标准的COM技术,如窗口过程子类。
    QAxWidget还从QAxBase继承了大部分与ActiveX相关的功能,特别是dynamicCall()和querySubObject()。
    警告:您可以继承QAxWidget,但不能在子类中使用Q_OBJECT宏(生成的moc文件将无法编译),因此您无法添加更多信号,插槽或属性。此限制是由运行时生成的元对象信息引起的。要解决此问题,请将QAxWidget聚合为QObject子类的成员。

    CONFIG  += qaxcontainer

    1. 妙用1 支持ActiveX对象

    Qt直接支持ActiveX对象,所以在QT中可以直接使用QAxWidget,也就是窗口控件对象。例如word,excel,powerpoint,pdf,flash等。

    对于doc,excel,ppt的文档格式可以直接将文件路径作为控件进行设置
    
    QAxWidget->setControl(“E:/test.doc”);直接会加载word应用打开doc文档,其他的微软格式也是这样的。如果不是微软的标准格式的话,那么你需要从控件列表中进行选择,或则从控件的注册表中进行选择。
    QString swfPath = qApp->applicationDirPath() + "/swf/player.swf";
    widget = new QAxWidget(ui->widget);
    widget->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));//设置此属性会初始化COM对象。 先前设置的任何COM对象都将关闭。
    widget->dynamicCall("LoadMovie(long,string)", 0, swfPath);
    

     

    2. 妙用2 访问网页
    #include "mainwindow.h"
    #include <QApplication>
    #include <QAxWidget>
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QAxWidget* webWidget = new QAxWidget;
        //设置ActiveX控件为IEMicrosoft Web Browser
        //设置ActiveX控件的id,最有效的方式就是使用UUID
        //此处的{8856F961-340A-11D0-A96B-00C04FD705A2}就是Microsoft Web Browser控件的UUID
        webWidget->setControl(QString::fromUtf8("{8856F961-340A-11D0-A96B-00C04FD705A2}"));
        webWidget->setObjectName(QString::fromUtf8("webWidget"));//设置控件的名称
        webWidget->setFocusPolicy(Qt::StrongFocus);//设置控件接收键盘焦点的方式:鼠标单击、Tab键
        webWidget->setProperty("DisplayAlerts",false); //不显示任何警告信息。
        webWidget->setProperty("DisplayScrollBars",true); // 显示滚动条
        webWidget->show();
        QString sUrl = "https://map.baidu.com/@13523265.31,3641114.64,12z";
        webWidget->dynamicCall("Navigate(const QString&)",sUrl);
        return a.exec();
    }

    3. 远程桌面

    1. // ui->axWidget->setControl(QStringLiteral("{8b918b82-7985-4c24-89df-c33ad2bbfbcd}"));
    2. ui->axWidget->setProperty("Server","192.168.31.158"); // 远程连接 IP
    3. ui->axWidget->setProperty("UserName", "administrator"); // 用户名
    4. ui->axWidget->setProperty("ClearTextPassword", "123456"); // 用户密码
    5. ui->axWidget->setProperty("DesktopWidth", 800); // 指定宽度
    6. ui->axWidget->setProperty("DesktopHeight", 600); // 指定高度
    7. ui->axWidget->dynamicCall("Connect()"); // 连接


  • 相关阅读:
    Python连接MySQL数据库之pymysql模块使用
    前端基础之BOM和DOM
    前端基础之JavaScript
    前端基础之CSS
    前端知识之HTML内容
    Python基础—名称空间(Day10)
    Python基础—装饰器(Day11)
    Python基础—迭代器、生成器(Day13)
    Python基础—文件操作(Day8)
    Python基础—函数(Day9)
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/14664457.html
Copyright © 2020-2023  润新知