《C++ GUI Qt 4 編程》 筆記(七)

博客搬家自 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版本


發佈了34 篇原創文章 · 獲贊 21 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章