《C++ GUI Qt 4 编程》 笔记(七)

原创 2016年08月29日 12:43:11

博客搬家自 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-..."); // 控件的UUID
wmp->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编程(第二版)高清PDF 带书签

  • 2016年10月13日 13:59
  • 21.51MB
  • 下载

《C++ GUI Qt 4 编程》 笔记(一)

博客搬家自 http://zhouyuanchao.com/wordpress/archives/62 第一部分 Qt基础 #include #include int main...
  • yjwx0018
  • yjwx0018
  • 2016年08月26日 22:41
  • 2832

《C++ GUI Qt 4 编程》 笔记(二)

博客搬家自 http://zhouyuanchao.com/wordpress/archives/66 第二部分 Qt中级 第6章 布局管理 分组布局 QStackedLayout 对一组子...
  • yjwx0018
  • yjwx0018
  • 2016年08月28日 01:46
  • 681

《C++ GUI Qt 4 编程》 笔记(一)

博客搬家自 http://zhouyuanchao.com/wordpress/archives/62 第一部分 Qt基础 #include #include int main...
  • yjwx0018
  • yjwx0018
  • 2016年08月26日 22:41
  • 2832

C++ GUI Qt 4编程(第二版)

C++ GUI Qt 4编程(第二版)(中文高清PDF扫描版)+随书源码 利用奇趣科技公司(Trolltedl)的Qt应用程序框架,可以构建出工业级的跨平台应用程序。在源代码不经任何修改的情...
  • jimeshui
  • jimeshui
  • 2015年01月13日 14:59
  • 1397

《C++ GUI Qt 4 编程》 笔记(四)

博客搬家自 http://zhouyuanchao.com/wordpress/archives/71 第12章 输入与输出 QIODevice 基类 QFile QTemporaryFi...
  • yjwx0018
  • yjwx0018
  • 2016年08月29日 12:38
  • 583

《C++ GUI Qt 4 编程》 笔记(五)

博客搬家自 http://zhouyuanchao.com/wordpress/archives/74 第15章 网络 QFtp QHttp QTcpSocket QSslSocket Q...
  • yjwx0018
  • yjwx0018
  • 2016年08月29日 12:40
  • 1072

《C++ GUI Qt 4 编程》 笔记(三)

博客搬家自 http://zhouyuanchao.com/wordpress/archives/69 第10章 项视图类 MVC 模型代表数据集,它对需要查看数据的获取以及任何存储的改变负...
  • yjwx0018
  • yjwx0018
  • 2016年08月28日 01:49
  • 507

Qt Gui使用(一)

1、Qt无边框窗体、最小化、任务栏右键 2、QWidget居中显示 3、Qt中文乱码 4、设置窗体底图,当图片存在中空时,透明显示背景色 5、窗体大小铺满屏幕 6、扣取图片的某一区域在底图上重叠显示 ...
  • devafree
  • devafree
  • 2016年05月04日 16:55
  • 235

Qt Gui使用(二)

1、Qt 工具栏(QToolBar、QAction)添加 2、Qt两个窗口间发送信号(signals、slots) 3、QTreeView添加Item 4、QTreeView遍历 5、QTreeVie...
  • devafree
  • devafree
  • 2016年05月04日 17:06
  • 321
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《C++ GUI Qt 4 编程》 笔记(七)
举报原因:
原因补充:

(最多只允许输入30个字)