Qt Creator快速入門 第9章 國際化、幫助系統和Qt插件_第1頁
Qt Creator快速入門 第9章 國際化、幫助系統和Qt插件_第2頁
Qt Creator快速入門 第9章 國際化、幫助系統和Qt插件_第3頁
Qt Creator快速入門 第9章 國際化、幫助系統和Qt插件_第4頁
Qt Creator快速入門 第9章 國際化、幫助系統和Qt插件_第5頁
已閱讀5頁,還剩44頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

《QtCreator快速入門》第2版第9章國際化、幫助系統和Qt插件(3課時)主要內容9.1國際化(第1課時)9.2幫助系統(第2課時)9.3創建Qt插件(第3課時)9.4小結(第3課時)9.1國際化

國際化的英文表述為Internationalization,通常簡寫為I18N(首尾字母加中間的字符數),一個應用程序的國際化就是使該應用程序可以讓其他國家的用戶使用的過程。Qt支持現在使用的大多數語言,特別是:所有東亞語言(漢語、日語和朝鮮語)所有西方語言(使用拉丁字母)阿拉伯語西里爾語言(俄語和烏克蘭語等)希臘語希伯來語泰語和老撾語所有在Unicode5.1中不需要特殊處理的腳本在Qt中,所有的輸入部件和文本繪制方式對Qt所支持的所有語言都提供了內置的支持。Qt內置的字體引擎可以在同一時間正確而且精細的繪制不同的文本,這些文本可以包含來自眾多不同書寫系統的字符。使用QtLinguist翻譯應用程序

在Qt中編寫代碼時要對需要顯示的字符串調用tr()函數,完成代碼編寫后,對這個應用程序的翻譯主要包含三步:1.運行lupdate工具從C++源代碼中提取要翻譯的文本,這時會生成一個.ts文件,這個文件是XML格式的;2.在QtLinguist中打開.ts文件,并完成翻譯工作;3.運行lrelease工具從.ts文件中獲得.qm文件,它是一個二進制文件。這里的.ts文件是供翻譯人員使用的,而在程序運行時只需要使用.qm文件,這兩個文件都是與平臺無關的。第一步:編寫源碼QLabel*label=newQLabel(this);label->setText(tr("helloQt!"));label->move(100,50);QLabel*label2=newQLabel(this);label2->setText(tr("password","mainwindow"));label2->move(100,80);QLabel*label3=newQLabel(this);intid=123;QStringname="yafei";label3->setText(tr("IDis%1,Nameis%2").arg(id).arg(name));label3->resize(150,12);label3->move(100,120);這里向界面上添加了三個標簽,因為這三個標簽中的內容都是用戶可見的,所以需要調用tr()函數。

tr()函數tr()函數一共有三個參數,它的原型如下:QString

QObject::tr(constchar*sourceText,

constchar*disambiguation=0,

int

n=-1)[static]

第一個參數sourceText就是要顯示的字符串,tr()函數會返回sourceText的譯文;第二個參數disambiguation是消除歧義字符串,比如這里的password,如果一個程序中需要輸入多個不同的密碼,那么在沒有上下文的情況下,就很難確定這個password到底指哪個密碼。這個參數一般使用類名或者部件名,比如這里使用了mainwindow,就說明這個password是在mainwindow上的;第三個參數n表明是否使用了復數,因為英文單詞中復數一般要在單詞末尾加“s”,比如“1message”,復數時為“2messages”。遇到這種情況,就可以使用這個參數,它可以根據數值來判斷是否需要添加“s”,例如:

intn=messages.count();

showMessage(tr("%n

message(s)saved","",n));第二步,更改項目文件

要在項目文件中指定生成的.ts文件,每一種翻譯語言對應一個.ts文件。打開myI18N.pro文件,在最后面添加如下一行代碼:TRANSLATIONS=myI18N_zh_CN.ts

這表明后面生成的.ts文件的文件名為“myI18N_zh_CN.ts”,對于.ts的名稱可以隨意編寫,不過一般是以區域代碼來結尾,這樣可以更好的區分,例如這里使用了“zh_CN”來表示簡體中文。最后按下Ctrl+S保存該文件。第三步,使用lupdate生成.ts文件

先要使用lupdate工具來提取源代碼中的翻譯文本,生成.ts文件。在項目文件列表的“myI18N.pro”文件上點擊鼠標右鍵,在彈出的菜單中選擇“在此打開命令行控制臺”,這時打開的命令行控制臺中會自動切換到了項目目錄下。 這時輸入下面一行代碼,并按下回車鍵:

lupdatemyI18N.pro該步也可以通過“工具→外部→Qt語言家→更新翻譯(lupdate)”菜單項來快速完成,注意在使用該菜單項之前先保存所有修改過的文件。第四步,使用QtLinguist完成翻譯

這一步一般是翻譯人員來做的,就是在QtLinguist中打開.ts文件,然后對字符串逐個進行翻譯。在系統的開始菜單中啟動Linguist(也可以直接在命令行輸入“linguist”啟動它;或者在Qt安裝目錄的tools目錄下找到并啟動它),然后點擊界面左上角的“open”圖標,在彈出的文件對話框中進入項目目錄,打開“myI18N_zh_CN”文件。①菜單項和工具欄

在菜單欄中列出了QtLinguist的所有功能選項,而工具欄中列出了常用的一些功能,其中后面9個圖標的功能為:在字符串列表中移動到前一個條目在字符串列表中移動到下一個條目在字符串列表中移動到前一個沒有完成翻譯的條目在字符串列表中移動到下一個沒有完成翻譯的條目標記當前條目為完成翻譯狀態,然后移動到下一個沒有完成翻譯的條目打開或關閉加速鍵(accelerator)驗證(validation)。打開加速鍵驗證可以驗證加速鍵是否被翻譯,例如字符串中包含“&”符號,但是翻譯中沒有包含“&”符號,則驗證失敗。打開或關閉短語結束標點符號驗證。打開短語標點符號驗證可以驗證翻譯中是否使用了和字符串中相同的標點來結尾。打開或關閉短語參考(phrasebook)驗證。打開短語參考驗證可以驗證翻譯是否和短語參考中的翻譯相同。在翻譯相似的程序時,若希望將常用的翻譯記錄下來,以便以后使用,就可以使用短語參考。可以通過“Phrases”→“NewPhraseBook”菜單來創建一個新的短語參考,然后再翻譯字符串時使用Ctrl+T將這個字符串及其翻譯放入短語參考中。打開或關閉占位符(placemarker)驗證。打開占位符驗證可以驗證翻譯中是否使用了和字符串中相同的占位符,例如%1,%2等。②上下文(Context)窗口

這里是一個上下文列表,羅列了要翻譯的字符串所在位置的上下文。其中的“Context”列使用字母表順序羅列了上下文的名字,它一般是QObject子類的名字;而“Item”列顯示的是字符串數目,例如0/8表明有8個要翻譯的字符串,已經翻譯了0個。在每個上下文的最左端用圖標表明了翻譯的狀態,它們的含義是:上下文中的所有字符串都已經被翻譯,而且所有的翻譯都通過了驗證測試(validationtest);上下文中的所有字符串或者都已經被翻譯,或者都已經標記為已翻譯,但是至少有一個翻譯驗證測試失敗;在上下文中至少有一個字符串沒有被翻譯或者沒有被標記為已翻譯;在該上下文中沒有再出現要翻譯的字符串,這通常意味著這個上下文已經不在應用程序中了。③字符串(String)窗口

這里羅列了在當前上下文中找到的所有要翻譯的字符串。在這里選擇一個字符串,可以使這個字符串在翻譯區域進行翻譯。在字符串左邊使用圖標表明了字符串的狀態,它們的含義是:源字符串已經翻譯(可能為空),或者用戶已經接受翻譯,而且翻譯通過了所有驗證測試;用戶已經接受了翻譯,但是翻譯沒有通過所有的驗證測試;字符串已經擁有了一個通過了所有驗證測試的非空翻譯,但是用戶還沒有接受該翻譯;字符串還沒有翻譯;字符串擁有一個翻譯,但是這個翻譯沒有通過所有的驗證測試;字符串已經過時,它已經不在該上下文中。④短語和表單(SourcesandForms)窗口:如果包含有要翻譯字符串的源文件在QtLinguist中可用,那么這個窗口會顯示當前字符串在源文件中的上下文。⑤翻譯區域(TheTranslationArea):在字符串列表中選擇的字符串會出現在翻譯區域的最頂端的“SourceText”下面;如果在使用tr()函數時設置了第二個參數消除歧義注釋,那么這里還會在“Developercomments”下出現該注釋;后面的“translation”中可以輸入翻譯文本,如果文本中包含空格,會使用“.”顯示;最后面的“translatorcomments”中可以填寫翻譯注釋文本。⑥短語和猜測(PhrasesandGuesses):如果字符串列表中的當前字符串出現在了已經加載的短語參考中,那么當前字符串和它在短語參考中的翻譯會被羅列在這個窗口。在這里可以雙擊翻譯文本,這樣翻譯文本就會復制到翻譯區域。⑦警告信息(Warnings)窗口:如果輸入的當前字符串的翻譯沒有通過開啟的驗證測試,那么在這里會顯示失敗信息。翻譯程序翻譯區域可以看到現在已經是要翻譯成中文“Chinesetranslation”,這是因為我們的.ts文件名中包含了中文的區域代碼。如果這里沒有正確顯示要翻譯成的語言,那么可以使用“Edit”→“TranslationFileSettings”菜單來更改。第五步,使用lrelease生成.qm文件

在命令行輸入如下一行代碼,并按下回車鍵:

lreleasemyI18N.pro

這樣就生成了.qm文件。也可以在QtLinguist中使用“文件→發布”和“文件→另外發布為”這兩個菜單項來生成當前已打開的.ts文件對應的.qm文件。該步還可以通過QtCreator的“工具→外部→Qt語言家→發布翻譯(lrelease)”菜單項來快速完成。第六步,使用.qm文件

在項目中添加代碼使用.qm文件來更改界面的語言。進入main.cpp文件,然后在QApplication

a(argc,argv);代碼下添加如下代碼:

QTranslatortranslator;translator.load("../myI18N/myI18N_zh_CN.qm");

a.installTranslator(&translator);

這里先加載了.qm文件(使用了相對路徑),然后為QApplication對象安裝了翻譯。注意,這幾行代碼一定要放到創建部件的代碼之前,比如這里放到了“MainWindoww;”一行代碼之前,這樣才能對該部件進行翻譯。程序翻譯中的相關問題

對所有用戶可見的文本使用QString對所有文字文本使用tr()函數對加速鍵的值使用QKeySequence()函數,例如:exitAct=newQAction(tr("E&xit"),this);exitAct->setShortcuts(QKeySequence::Quit);對動態文本使用QString::arg()函數9.2幫助系統一個完善的應用程序應該提供盡可能豐富的幫助信息。在Qt中可以使用工具提示、狀態提示以及“What’sThis”等簡單的幫助提示,也可以使用QtAssistant來提供強大的在線幫助。簡單的幫助提示定制QtAssistant簡單的幫助提示

“What’sThis”幫助提示。在運行一個對話框窗口時,會看到在標題欄中有一個“?”圖標,按下它就會進入“What’sThis”模式,這時如果哪個部件設置了“What’sThis”幫助提示,那么當鼠標移動到它上面時就會彈出一個懸浮的文本框顯示相應的幫助提示。設計模式實現:在界面上點擊鼠標右鍵,在彈出的菜單中選擇“改變‘這是什么’”菜單,這時便會出現“編輯這是什么”對話框,可以在這里輸入文本或者添加圖片來設置“What’sThis”幫助提示。代碼方式實現:

QAction*action=QWhatsThis::createAction(this);

ui->mainToolBar->addAction(action);定制QtAssistant

為了將QtAssistant定制為自己的應用程序的幫助瀏覽器,需要先進行一些準備工作,主要是生成一些文件,最后再在程序中啟動QtAssistant。主要的步驟如下:1.創建HTML格式的幫助文檔;2.創建Qt幫助項目(Qthelpproject).qhp文件,該文件是XML格式的,用來組織文檔,并且使它們可以在QtAssistant中使用;3.生成Qt壓縮幫助(Qtcompressedhelp).qch文件,該文件由.qhp文件生成,是二進制文件;4.創建Qt幫助集合項目(Qthelpcollectionproject).qhcp文件,該文件是XML格式的,用來生成下面的.qhc文件;5.生成Qt幫助集合(Qthelpcollection).qhc文件,該文件是二進制文件,可以使QtAssistant只顯示一個應用程序的幫助文檔,也可以定制QtAssistant的外觀和一些功能;6.在程序中啟動QtAssistant。第一步,創建HTML格式的幫助文檔可以通過各種編輯器例如MicrosoftWord來編輯要使用的文檔,最后保存為HTML格式的文件。例如這里我們創建了5個HTML文件。然后在項目目錄中新建文件夾,命名為“documentation”,再將這些HTML文件放入其中。再在documentation文件夾中再新建一個“images”文件夾,往里面復制一個圖標圖片,以后將作為QtAssistant的圖標,例如這里使用了yafeilinux.png圖片。第二步,創建.qhp文件

創建一個文本文件另存為“myHelp.qhp”,.qhp文件是XML格式的。<?xmlversion="1.0"encoding="GB2312"?><QtHelpProjectversion="1.0"><namespace>yafeilinux.myHelp</namespace><virtualFolder>doc</virtualFolder><filterSection><toc><sectiontitle="我的幫助"ref="./index.html"><sectiontitle="關于我們"ref="./aboutUs.html"><sectiontitle="關于yafeilinux"ref="./about_yafeilinux.html"></section><sectiontitle="關于QtCreator系列教程"ref="./about_QtCreator.html"></section></section><sectiontitle="加入我們"ref="./joinUs.html"></section></section></toc><keywords><keywordname="關于"ref="./aboutUs.html"/><keywordname="yafeilinux"ref="./about_yafeilinux.html"/><keywordname="QtCreator"ref="./about_QtCreator.html"/></keywords><files><file>about_QtCreator.html</file><file>aboutUs.html</file><file>about_yafeilinux.html</file><file>index.html</file><file>joinUs.html</file><file>images/*.png</file></files></filterSection></QtHelpProject>在第一行是XML序言,這里指定了編碼encoding為GB2312,這樣就可以使用中文了,如果只想使用英文,那么編碼一般是UTF-8;第二行指定了QtHelpProject版本為1.0;第三行指定了命名空間namespace,每一個.qhp文件的命名空間都必須是唯一的,命名空間會成為QtAssistant中的頁面的URL的第一部分,這個在后面的內容中會涉及到;第四行指定了一個虛擬文件夾virtualFolder,這個文件夾并不需要創建,它只是用來區分文件的;再下面的過濾器部分filterSection標簽包含了目錄表、索引和所有文檔文件的列表。過濾器部分可以設置過濾器屬性,這樣以后可以在QtAssistant中通過過濾器來設置文檔的顯示有否,不過,因為這里只有一個文檔,所以不需要QtAssistant的過濾器功能,這里也就不需要設置過濾器屬性;在目錄表toc(tableofcontents)標簽中創建了所有HTML文件的目錄,指定了它們的標題和對應的路徑。然后是keywords標簽,它指定了所有索引的關鍵字和對應的文件,這些關鍵字會顯示在QtAssistant的索引頁面;在files標簽中列出了所有的文件,也包含圖片文件。第三步,生成.qch文件

這里為了測試創建的文件是否可用,可以先生成.qch文件,然后在QtAssistant中注冊它。這樣運行QtAssistant就會看到添加的文檔了。不過,這一步不是必須的。打開命令行控制臺,然后使用cd命令跳轉到項目目錄的documentation目錄中,分別輸入下面的命令后按下回車:qhelpgenerator

myHelp.qhp–omyHelp.qchassistant–registermyHelp.qch第四步,創建.qhcp文件

要想使QtAssistant只顯示我們自己的幫助文檔的最簡單的方法就是生成幫助集合文件即.qhc文件,要生成.qhc文件,首先要創建.qhcp文件。在documentation文件夾中新建文本文檔,對其進行編輯,最后另存為“myHelp.qhcp”,注意后綴為.qhcp。這里還要創建一個名為“about.txt”的文本文件,在其中輸入一些該幫助的說明信息,作為QtAssistant的About菜單的顯示內容。<?xmlversion="1.0"encoding="GB2312"?><QHelpCollectionProjectversion="1.0"><assistant><title>我的幫助系統</title><applicationIcon>images/yafeilinux.png</applicationIcon><cacheDirectory>cache/myHelp</cacheDirectory><homePage>qthelp://yafeilinux.myHelp/doc/index.html</homePage><startPage>qthelp://yafeilinux.myHelp/doc/index.html</startPage><aboutMenuText><text>關于該幫助</text></aboutMenuText><aboutDialog><file>./about.txt</file><icon>images/yafeilinux.png</icon></aboutDialog><enableDocumentationManager>false</enableDocumentationManager><enableAddressBar>false</enableAddressBar><enableFilterFunctionality>false</enableFilterFunctionality></assistant><docFiles><generate><file><input>myHelp.qhp</input><output>myHelp.qch</output></file></generate><register><file>myHelp.qch</file></register></docFiles></QHelpCollectionProject>在assistant標簽中是對QtAssistant的外觀和功能的定制,其中設置了標題、圖標、緩存目錄、主頁、起始頁、About菜單文本、關于對話框的內容和圖標等,還關閉了一些沒有用的功能。

緩存目錄cacheDirectory,是進行全文檢索等操作時緩存文件要存放的位置。

主頁homePage和起始頁startPage,這里使用了第二步中提到的QtAssistant的頁面的URL,這個URL由“qthelp://”開始,然后是在.qhp文件中設置的命名空間,然后是虛擬文件夾,最后是具體的HTML文件名。因為QtAssistant可以添加或者刪除文檔來為多個應用程序提供幫助,但是這里只是為一個應用程序提供幫助,并且不希望刪除我們的文檔,所以禁用了文檔管理器documentationmanager;因為這里的文檔集很小,而且只有一個過濾器部分,所以也關閉了地址欄addressbar和過濾器功能filterfunctionality。第五步,生成.qhc文件

在命令行輸入如下命令:qcollectiongenerator

myHelp.qhcp–omyHelp.qhc為了測試我們定制的QtAssistant,可以在輸入如下命令:assistant–collectionFile

myHelp.qhc這里在運行QtAssistant時指定了集合文件為我們自己的.qhc文件,所以運行后只會顯示我們自己的HTML文檔。可以看到,現在QtAssistant的圖標也更改了,打開“Help”菜單中的“關于該幫助”菜單,這里是前面添加的about.txt文件的內容。第六步,在程序中啟動QtAssistant

自學內容:如何在自己的程序中通過點擊按鈕來啟動自定義的幫助系統?9.3創建Qt插件Qt插件(QtPlugin)就是一個共享庫(dll文件),可以使用它來進行功能的擴展。Qt中提供了兩種API來創建插件:用來擴展Qt本身的高級API,如自定義數據庫驅動、圖片格式、文本編碼和自定義風格等;用來擴展Qt應用程序的低級API。如果要寫一個插件來擴展Qt本身,那么可以子類化合適的插件基類,然后重寫一些函數并添加一個宏。在設計模式提升窗口部件

一般的,使用代碼生成的部件無法直接在設計器中使用,但是可以通過建立成設計器插件來實現,不過,一個更簡單的方法是使用提升窗口部件的做法,這樣可以將設計器中的部件指定為我們自定義的類的實例。例如:先自定義一個類名為“MyButton”,基類為“QPushButton”的按鈕類。在設計模式中向界面上放入一個PushButton,并在pushButton上點擊鼠標右鍵,在彈出的菜單中選擇“提升的窗口部件”。在彈出的對話框中將提升的類名稱改為“MyButton”,頭文件會自動生成為“mybutton.h”,這時按下右邊的添加按鈕,就會在提升的類列表中進行顯示,按下“提升”按鈕退出對話框。創建應用程序插件

當要創建一個插件時,要先創建一個接口,接口就是一個類,它只包含純虛函數。插件類要繼承自該接口。插件類存儲在一個共享庫中,因此可以在應用程序運行時進行加載。創建一個插件包括以下幾步:定義一個插件類,它需要同時繼承自QObject類和該插件所提供的功能對應的接口類;使用Q_INTERFACES()宏在Qt的元對象系統中注冊該接口;使用Q_EXPORT_PLUGIN2()宏導出該插件;使用合適的.pro文件構建該插件。 使一個應用程序可以通過插件進行擴展要進行以下幾步:定義一組接口(只有純虛函數的抽象類);使用Q_DECLARE_INTERFACE()宏在Qt的元對象系統中注冊該接口;在應用程序中使用QPluginLoader來加載插件;使用qobject_cast()來測試插件是否實現了給定的接口。示例通過創建一個過濾字符串中出現的第一個數字的插件來講解應用程序的插件的創建過程。這里需要創建兩個項目,一個項目用來生成插件即dll文件;另一個項目是一個測試程序,用來使用插件。因為這兩個項目中有共用的文件,所以這里將它們放到一個目錄中。創建插件

第一步,創建插件類。新建空的Qt項目,項目名稱為“plugin”,在選擇路徑時指定到一個新建的“myPlugin”目錄中。建立好項目后向其中添加一個C++類,類名為“RegExpPlugin”,基類保持為空,類型信息選擇“無”。

第二步,定義插件類。將regexpplugin.h文件中的內容更改如下:#ifndefREGEXPPLUGIN_H#defineREGEXPPLUGIN_H#include<QObject>#include"regexpinterface.h"classRegExpPlugin:publicQObject,RegExpInterface{Q_OBJECT

Q_INTERFACES(RegExpInterface)

public:

QString

regexp(const

QString&message);};#endif

為了使這個類作為一個插件,它需要同時繼承自QObject和RegExpInterface。RegExpInterface是接口類,它用來指明插件要實現的功能,這個類在regexpinterface.h文件中定義,這個文件在后面的測試程序項目中。這里還需要使用Q_INTERFACES()宏將這個接口注冊到Qt的元對象系統中,告知Qt這個類實現了哪個接口。最后還聲明了一個regexp()函數,它是在RegExpInterface中定義的一個純虛函數。這里通過重寫它來實現該插件具體的功能,就是將字符串中的第一個數字提取出來并返回。

第三步,導出插件。將regexpplugin.cpp文件中的內容更改如下:#include“regexpplugin.h”#include<QRegExp>#include<QtPlugin>QString

RegExpPlugin::regexp(const

QString&message){

QRegExp

rx("\\d+");

rx.indexIn(message);

QString

str=rx.cap(0);returnstr;}Q_EXPORT_PLUGIN2(regexpplugin,RegExpPlugin); 這里最后使用了Q_EXPORT_PLUGIN2()導出了該插件,其中regexpplugin為插件名,RegExpPlugin為插件類名。第四步,更改項目文件。打開文件,將其內容更改如下:TEMPLATE=libCONFIG+=pluginINCLUDEPATH+=../regexpwindowHEADERS=regexpplugin.hSOURCES=regexpplugin.cppTARGET=regexppluginDESTDIR=../plugins這里使用了TEMPLATE=lib表明該項目要構建庫文件,而不是像以前那樣的可執行文件;使用CONFIG+=plugin告知qmake要創建一個插件;因為項目中使用了regexpwindow目錄中的regexpinterface.h文件,所以這里將該目錄的路徑添加到了INCLUDEPATH中;TARGET指定了生產的dll文件的名字,它需要和上一步中的Q_EXPORT_PLUGIN2()指定的名字相同;最后使用DESTDIR指定了生成的dll文件所在的目錄。使用插件擴展應用程序第一步,新建QtGui應用。項目名稱為“regexpwindow”,選擇路徑時仍選擇前面建立的myPlugin目錄。基類選擇QWidget,類名保持“Widget”不變。建立完成后,向該項目中添加新文件,模板選擇C++頭文件,名稱為“regexpinterface.h”。

第二步,定義接口。將regexpinterface.h文件的內容更改如下:#ifndefREGEXPINTERFACE_H#defineREGEXPINTERFACE_H#include<QString>classRegExpInterface{public:virtual~RegExpInterface(){}virtualQString

regexp(const

QString&message)=0;};Q_DECLARE_INTERFACE(RegExpInterface,"yafeilinux.RegExpInterface/1.0");#endif

在接口類中定義了插件要實現的函數,比如這里定義了regexp()函數,可以看到在前面的RegExpPlugin類中我們已經實現了該函數。在這個類中只能包含純虛函數。最后使用Q_DECLARE_INTERFACE()宏在Qt元對象系統中注冊了該接口,其中第二個參數是一個字符串,用來確保這個接口與其他接口不會相同。第三步,加載插件。先點擊widget.ui文件進入設計模式,設計的界面。將其中顯示“無”字的Label的objectName屬性更改為“labelNum”。然后進入widget.h文件,先添加頭文件#include"regexpinterface.h",然后在private部分定義一個接口對象指針,再聲明一個加載插件函數:RegExpInterface*regexpInterface;bool

loadPlugin();現在到widget.cpp文件中先添加頭文件包含:#include<QPluginLoader>#include<QMessageBox>#include<QDir>

然后在構造函數中調用加載插件函數,如果加載失敗則進行警告:if(!loadPlugin()){//如果無法加載插件

QMessageBox::information(this,"Error","Couldnotloadtheplugin");

ui->lineEdit->setEnabled(false);

ui->pushButton->setEnabled(false);}下面是加載插件函數的定義:bool

Widget::loadPlugin(){QDir

pluginsDir("../plugins");//遍歷插件目錄

foreach(QString

fileName,pluginsDir.entryList(QDir::Files)){

QPluginLoader

pluginLoader(pluginsDir.absoluteFilePath(fileName));

QObject*plugin=pluginLoader.instance();if(plugin){

regexpInterface=qobject_cast<RegExpInterface*>(plugin);if(regexpInterface)returntrue;}}returnfalse;}

這里使用QDir類指定到存放dll文件的plugins目錄,然后遍歷該目錄,使用QPluginLoader類來加載插件,并使用qobject_cast()來測試插件是否實現了RegExpInterface接口。最后到設計模式,轉到“過濾”按鈕的clicked()信號對應的槽,更改如下:voidWidget::on_pushButton_clicked(){

QString

str=regexpInterface->regexp(ui->lineEdit->text());

ui->labelNum->setText(str);}

這里就是使用了regexpInterface接口的regexp()函數來獲取lineEdit部件中輸入的字符串中第一個出現的數字,然后在labelNum

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論