《C++ GUI Qt 4 编程》 笔记(七)
来源:互联网 发布:网络词牙膏是什么意思 编辑:程序博客网 时间:2024/06/05 20:35
博客搬家自 http://zhouyuanchao.com/wordpress/archives/81
第21章 创建插件
动态链接库
LIBS += -ldb_cxx
INCLUDEPATH += /usr/local/BerkeleyDb.4.2/include
QLibrary 动态加载dll
插件
常见的插件类型:
数据库驱动程序、图像格式、风格、文本编码解码器
实现一个插件
需要实现两种类:
插件类 提供访问插件功能(处理器类)的接口
处理器基类 插件提供的功能
class BronzeStylePlugin : public QStylePlugin{public:// 返回一个该插件可以创建的对象列表,不区分大小写virtual QStringList keys() const{return QStringList() << "Bronze";}// 返回指定对象virtual QStyle* create(const QString& key){if (key.toLower() == "bronze";return new BronzeStyle;return 0;}};// cpp文件最后:第一个参数是插件名字Q_EXPORT_PLUGIN2(bronzestyleplugin, BronzeStylePlugin)
.pro
TEMPLATE = lib
CONFIG += plugin // 指明是插件库而不是通用库
Qt应用程序在plugins目录中寻找插件比如 plugins/styles
如果需要将Qt插件配置到其他目录中
需要在代码中扩展搜索路径
QCoreApplication::addLibraryPath()
或设置QT_PLUGIN_PATH环境变量
自定义插件
1.定义接口
class TextArtInterface{// ...};Q_DECLARE_INTERFACE(TextArtInterface, "com.software-inc.TextArt.TextArtInterface/1.0")
2. 定义插件
class BasicEffectsPlugin : public QObject, public TextArtInterface{// ...}Q_EXPORT_PLUGIN2(basiceffectsplugin, BasicEffectsPlugin)
感知插件,加载插件
QPluginLoader loader(filePath);interface = qobject_cast<TextArtInterface*>(loader.instance());// instance() 返回QObject*
第22章 应用程序脚本
QtScript模块 ECMAScript (JavaScript标准)
1.把脚本读入QString
2.创建一个QScriptEngine对象,并设置应用程序相关的功能
3.执行脚本
QFileSystemWatcher
QTextStream in(&jsFile);in.setCodec("UTF-8");QString script = in.readAll();jsFile.close();QScriptEngine interpreter;// 第二个参数为传入的参数QScriptValue operand(&interpreter, display->text().toDouble()); interpreter.globalObject().setProperty("x", operand);QScriptValue result = interpreter.evaluate(script);if (result.isNumber){// 脚本的返回值// result.toNumber;}
脚本:
pi.js
return 3.14;
cube.js
return x * x * x;
QSyntaxHighlighter
QUiLoader
扩展QVariant处理的类型
Q_DECLARE_METATYPE(QScriptValue)
第23章 平台相关特性
平台相关的编程接口
Windows Win32
Mac OS X Carbon
X11 Xlib
QWidget::winId() 返回平台相关的窗口句柄
QWidget::find() 返回指定窗口ID对应的QWidget
平台相关宏定义
Q_WS_MAC
Q_WS_X11
Q_WS_WIN
Q_WS_QWS (Qtopia)
系统版本
QSysInfo::WindowsVersion()
QSysInfo::MacintoshVersion()
编译器宏
Q_CC_MSVC
Qt/Windows桌面版 提供了ActiveQt框架,用以为ActiveX和Qt提供完美结合。
ActiveQt由两个模块组成:
QAxContainer 允许我们使用COM对象并且可以在Qt应用程序中嵌入ActiveX控件
QAxServer 允许我们导出使用Qt编写的自定义的COM对象和ActiveX控件
.pro
CONFIG += qaxcontainer
CONFIG += qaxserver
Q_ENUMS()宏
用来告诉moc在槽中使用的该类型为一个枚举类型
QAxObject封装一个COM对象
QAxWidget封装一个ActiveX控件
QAxBase为QAxObject和QAxWidget实现了COM的核心功能
// setControl()将创建一个所需组件的实例// ActiveX控件的所有属性、事件和方法// 都可以通过QAxWidget对象作为Qt的属性、信号和槽来加以使用QAxWidget* wmp = new QAxWidget;wmp->setControl("{xxx-xxx-..."); // 控件的UUIDwmp->setProperty("ShowControls", false);// 调用COM方法wmp->dynamicCall("TitlePlay(uint)", 6);
编写服务器
class AxBouncer : public QWidget, public QAxBindable{};
当包括一个源于QObject类的多重继承的时候,必须总是把这个起源于QObject的类放在第一位,以便moc可以快速识别它。
Q_PROPERTY()宏 使用该宏声明的属性可以用setProperty()设置值
第24章 嵌入式编程
Qt/Embedded Linux (Qtopia Core)是为嵌入式Linux优化过的Qt版本
- 《C++ GUI Qt 4 编程》 笔记(七)
- 《C++ GUI Qt 4 编程》 笔记(一)
- 《C++ GUI Qt 4 编程》 笔记(二)
- 《C++ GUI Qt 4 编程》 笔记(三)
- 《C++ GUI Qt 4 编程》 笔记(四)
- 《C++ GUI Qt 4 编程》 笔记(五)
- 《C++ GUI Qt 4 编程》 笔记(六)
- Java GUI编程(七)
- QT之GUI学习笔记(七)----菜单和工具栏
- C++ GUI Qt4学习笔记(七)
- C++ GUI Qt 4 编程(第二版)
- C++ GUI Qt 4编程(第二版)
- QT自学笔记(七)
- Qt C++GUI Qt4 编程书中网址
- C++GUI Programming with QT学习笔记day01
- QT分析之网络编程(七)
- C专家编程(七)
- 《Python编程》笔记(七)
- 沉浸模式和透明状态栏笔记
- 《C++ GUI Qt 4 编程》 笔记(六)
- TOMCAT内存溢出
- Web RTC demo
- linux之chattr命令
- 《C++ GUI Qt 4 编程》 笔记(七)
- 2016MUTC10-1002 Hard problem
- 【框架-MFC】设置单文档和多文档窗口标题
- 基数排序
- 1000 A+B问题
- hdoj2077汉诺塔IV
- AndroidStudio引用lib库时,Gradle报的“tools:replace=”错误
- Revit开发编辑族参数
- CSS font-size单位