戴莉萍
(江西師范大學 軟件學院,南昌 330022)
基于Qt與Android的實驗查錯系統設計
戴莉萍
(江西師范大學 軟件學院,南昌 330022)

在高等教育實驗過程中,學生通過錯誤處理來提高相應技能。結合當前學生查閱習慣和Android軟件開發技術,以提高大學實驗教學效果為目的,設計了一套基于Qt與Android的實驗錯誤查詢系統。介紹了該系統的開發平臺、結構組成、數據結構以及關鍵技術。該實驗查錯系統通過快速有效搜索所出現問題的解決方案,很好地培養了學生的獨立性,加快了實驗進度,也進一步推動了實驗改革。
查錯系統; Qt技術; Android; XML操作
現代高等教育非常重視學生實踐能力的培養,例如計算機專業課程中實驗環節經常占據了整個教學活動的一半。學生在實驗過程中難免會遇到各種問題,出現各種錯誤;這時候往往需要指導教師指出錯誤所在,提供解決方法。但這其中受到很多因素的限制,例如調錯時間長短、實驗人數多少、實驗難度大小、是否新出現的錯誤等,一定程度上影響著實驗的完成效果。本文中的實驗查錯系統就是將以往實驗過程中出現的錯誤以及解決方法一一記錄下;學生在實現過程中可以自行查找問題的解決方法,既加快了實驗進度,又培養獨立思考能力,使得實驗效果事半功倍。
該實驗查錯系統目前是針對嵌入式課程教學實驗開發的,這也是由于該門課程實驗教學特殊性所決定的。一般基礎性計算機課程例如數據結構、C語言程序設計等,實驗教材種類較多且齊全;實驗環境較為單一,通常一臺計算機和一套編譯環境足以;錯誤解決途徑比較多,如網絡資源非常豐富。而嵌入式實驗教學則有著不同的情形,實驗教學平臺的多樣化使得實驗教材的選擇性非常窄;實驗環境較為復雜,例如PC機、嵌入式開發板、各種外設及其驅動等;錯誤解決途徑較少,網絡資源少且開發板的技術支持往往滯后。因此這門課程的實驗教學需要更實用的計算機輔助教學系統來支持[1]。
系統中的錯誤信息及其解決方法來自于課程實驗指導教師和學生;由指導教師收集并整理,按照一定的數據格式將其入庫保存。學生在實驗實施過程中遇到問題時,可以根據關鍵詞搜索出相關的處理方法,然后一一閱讀,解決問題。圖1描述了該系統的結構設計。

圖1 系統結構設計
由于PC端的開發環境與查錯系統頻繁切換,一定程度上會降低效率,而且手機閱讀非常普遍,故該實驗查錯系統增加了Android功能,而Android端功能的描述則是本文的重點。
PC端的功能主要以大量數據處理和存儲為主,當然也包含了查詢功能;而Android端則主要是查詢功能的實現。由于PC端數據格式為關系型數據儲存,這里使用SQL Server;而Android端數據格式為層次型數據存儲,即XML,因此需要格式轉換功能,將關系型數據格式轉換為層次型數據格式[2-5]。
本系統的目的主要體現在3個方面:① 加強學生對于錯誤文檔化重要性的認識;② 加強學生獨立思考和解決問題的能力;③ 提高單位時間內的實驗效果。
XML是指可擴展標記語言,是各種應用程序之間進行數據傳輸的最常用工具,并且在信息存儲和描述領域中變得越來越流行。XML數據以純文本格式進行存儲,因此提供了一種獨立于軟件和硬件的數據存儲方法,使數據更可用且更有用,從而可供各種閱讀設備使用[6-7]。
本查錯系統的Android端數據結構采用了XML層次型數據庫,根據系統的需求定義了兩個XML文件,1個關鍵詞搜索文件和1個錯誤解決方案的數據文件。關鍵詞搜索文件papers.xml較為簡單,存放了各個錯誤問題名稱,其簡化后的結構如下所示:
該關鍵詞搜索文件中各個節點只有屬性值,而沒有文本值,即XML空元素,這是便于之后的Qt程序中使用XPath技術來實現模糊查詢。另一個是存放每個問題的已有解決方法papercontent.xml文件,其內容簡化后的結構如下:
與搜索文件相比,正文的XML數據層次多了一層,即para節點,且該節點是文本節點,每個節點將其問題的解決方法一一進行描述。從節點來看,兩個文件的關聯之處正在于paper節點的topic屬性。
大多數與XML相關的API在Android上得到了很好的支持。而且對于Android移動設備而言,由于設備內存有限,文件整體不算太大,因此本系統將采用DOM技術來處理XML文件[8-9]。
本查錯系統采用Qt Creator來完成系統在Android上的創建、管理、編譯和部署。Qt最大的優勢在于跨平臺開發,目前的Qt版本已經能較完整地支持Android;在復雜運算上面的效率也非常不錯[10-12]。
手機應用開發中的界面設計不同于PC應用開發中的“所見即所得”,其中很重要的一個問題就是如何實現屏幕自適應,即使得程序窗體自動適應不同大小的屏幕,根據屏幕寬度,自動調整布局。Qt提供了布局管理類來負責排列窗體上的控件,本查錯系統就充分利用了Qt的顯示控件、命令控件和布局控件,結合程序編碼靈活地完成Android端的界面設計。
以關鍵詞搜索界面為例來說明界面設計的實現過程。首先將需要使用到的控件拖至窗體上,此時不需要進行任何排列,如圖2所示。

圖2 界面初始設計
由圖2可見,使用了文本框、標簽、按鈕以及網格布局GridLayout等控件。在該窗體的初始化中添加如下的關鍵布局代碼:
DialogUITest1::DialogUITest1(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogUITest1)
{
ui->setupUi(this);
ui->namelabel->setText(tr("關鍵詞:"));
ui->searchbtn->setText(tr("查詢"));
ui->mainlayout->setSpacing(2);
ui->mainlayout->setMargin(2); ui->mainlayout->addWidget(ui->namelabel,0,0,1,1,Qt::AlignCenter); //行號,列號,行寬,列寬。
ui->mainlayout->addWidget(ui->namelinet,0,1,1,3);
ui->mainlayout->addWidget(ui->searchbtn,1,0,1,4);
ui->mainlayout->addWidget(ui->resultlstw,2,0,5,4);
setLayout(ui->mainlayout);
}
此外,調用該窗體時不需要計算屏幕的分辨率,直接顯示為全屏即可。運行效果如圖3所示。
使用布局控件的好處在于當程序在不同平臺上運行時,能夠自動調節窗體里所有控件的大小和尺寸。因此在Android環境下,可不用修改布局源碼,而直接使用。在實現過程中如果沒有使用到UI類,則可以在源文件中自定義各個控件,在使用時實例化并且按照一定的布局進行排版,這樣也可得到同樣的運行效果,這也體現出Qt開發環境的強大。

圖3 初始界面運行效果
Android端的查錯系統主要有關鍵詞搜索和結果顯示兩個子功能,其操作對象就是之前的XML數據文件。在Qt中提供了Qt XML模塊實現了對XML數據的處理,主要是服務于兩種操作XML文檔的方法:DOM和SAX。其中DOM將XML文檔轉換成應用程序可以遍歷的樹形結構,可以隨機訪問其中的節點,且語句簡單易懂,本系統采用的就是DOM方法[13-15]。
Android端子系統對于數據的操作主要在于查詢和讀取,而XML數據的查詢則需要用到XPath技術。XPath用于XML文檔中通過元素和屬性進行導航,并使用謂詞表達式查找某個特定的節點或包含某個指定值的節點。下面這段關鍵代碼描述了如何根據關鍵詞對XML文件進行模糊查詢,即“查詢”按鈕點擊事件:
QFile file(":/xml/papers.xml");
query.setFocus(&file); query.setQuery("papers/paper[contains(@topic,'"+ui->namelinet->text()+"')]");
query.evaluateTo(&sResult);
xmlstr="";
xmlstr=xmlstr+"
xmlstr=xmlstr+sResult;
xmlstr=xmlstr+"";
xmldoc.setContent(xmlstr);
varNodes = xmldoc.elementsByTagName("paper");
for (int i = 0; i < varNodes.count(); i++)
{
node = varNodes.at(i);
topicstr = node.toElement().attribute("topic");
ui->resultlstw->addItem(topicstr);
}
代碼中使用了XPath的路徑表達式來進行節點定位,并使用了contains關鍵詞來進行屬性topic的模糊匹配;將查詢出來的sResult字符串通過頭尾字符連接形成1個完整的XML數據片段,通過循環遍歷將屬性值一一讀取并顯示出來,運行效果如圖4所示。

圖4 關鍵詞搜索運行效果圖
從運行效果可見,原XML文件有6個節點,而最終結果只顯示了2個節點,這是由于進行了條件過濾。點擊任一條記錄,則會出現另一個窗口,列出了該問題的可能解決方案。這里涉及到Qt窗體之間的消息傳遞,可以通過信號與槽機制,也可以通過全局變量的設置;由于兩個窗體之間傳遞的值是單個,故系統中采用了后者。結果顯示窗體的代碼與關鍵詞搜索代碼比較類似,其關鍵代碼如下所示:
QFile file(":/xml/papercontent.xml");
query.setFocus(&file); query.setQuery("papers/paper [@topic='"+searchdata+"']");
...
for (int i = 0; i < varNodes.count(); i++)
{
node = varNodes.at(i);
topicstr = topicstr+QString::number(i+1)+":"+node.toElement().text()+" ";
ui->contentptxte->setPlainText(topicstr);
}
代碼中使用了XPath的精確查詢,并且由于界面設計使用的是文本框,而不是列表框,故無法一行一行顯示,因此,在內容顯示增加了數字符號和換行符。其運行效果如圖5所示。

圖5 顯示解決方案
圖5中列出了解決該問題的可能方案。由于學生在實驗過程中還可能會出現未發現的問題,因此xml數據文件的更新在PC端完成,此時Android端需要重新部署并下載。另一方面,由于Qt的可移植性,該套系統稍加修改就可運行在嵌入式實驗平臺上,從而成為一個較好的實驗案例。
本文通過對實驗教學現狀的分析,設計了基于Qt的實驗查錯系統;詳細描述了該系統Android端的實現過程與重點技術。該系統能夠很好地成為教師實驗指導中的助手,并且學生不僅可以通過該系統快速得到各種問題的解決方法,而且通過該系統也可以很好地了解Qt在Android上開發APP的相關知識。與此同時,該查錯系統為實驗教學提供了新的思路和方法,在未來的應用過程中仍有可改善的空間。
[1] 戴莉萍,黃龍軍,胡國雄. 淺析嵌入式實驗中錯誤的文檔化[J].實驗科學與技術, 2014,12(5):49-51,82.
[2] 熊照雷,閆慧澤,孫 立,等. 基于Android平臺的實驗數據綜合處理系統的設計和實現[J]. 實驗室研究與探索, 2014,33(12):121-125.
[3] 倪紅軍. 基于Android平臺的消息推送研究與實現[J]. 實驗室研究與探索, 2014,33(5):96-100.
[4] 李東煒,劉鎮章. 基于Android智能手機的實驗室預約系統設計[J]. 實驗技術與管理, 2012,29(12):196-198,202:
[5] 唐 璐,田傳耕,祖茂衡,等. 基于Android的實驗設備遠程控制系統設計[J]. 實驗技術與管理, 2015,32(5):150-153.
[6] 丁躍潮,張 濤. XML實用教程[M]. 北京:北京大學出版社,2006.
[7] 孫更新,李偉超,李玉玲.XML編程與應用教程(2版)[M].北京:清華大學出版社,2014.
[8] 李瑞花, 基于Android的XML解析技術的分析[J]. 計算機時代, 2010(12):31-33.
[9] 欒詠紅. 基于Android的XML解析器的分析與比較[J]. 南京曉莊學院學報, 2011(6):98-100.
[10] 殷立峰,祁淑霞,房志峰.Qt C++跨平臺圖形界面程序設計基礎[M].北京:清華大學出版社,2014.
[11] 劉匯丹,芮建武,姚延棟,等. 基于Qt的國際化圖形用戶界面設計與實現[J]. 中文信息學報, 2006,20(4):94-99.
[12] 安 峰. Qt平臺上的動態可定制界面設計[J]. 單片機與嵌入式系統應用, 2014(3):24-25,28.
[13] 魏 楠,張沛朋.基于XML技術的數據庫查詢設計的討論[J].高等函授學報(自然科學版),2012,25(4):81-82.
[14] 王靜婷,王艷麗,王振輝.半結構化數據裝載到數據倉庫的設計與實現[J].計算機與數字工程,2014,42(11):2198-2201.
[15] 郭東峰.基于DOM的Web數據抽取研究[J].科技創新與應用,2013(18):77.
Design of Query System for Experimental Errors Based on Qt and Android
DAILi-ping
(School of Software, Jiangxi Normal University, Nanchang 330022, China)
During the experiment, students improve their skill by overcome all kinds of errors. Considering their current reading habits and Android development technologies, a query system for experimental errors has been designed and implemented to benefit the experimental procedure. This paper introduces the developing platform, modules, data structure and key technologies. This query system can search the corresponding solutions effectively. The system could train students' independence and fasten the experimental procedure, and promote experiment teaching reform.
error query; Qt technology; Android; XML manipulation
2016-04-28
嵌入式實驗課程錯誤管理系統的研究與實現(JXJG-14-2-20)
戴莉萍(1979-),女,江西南昌人,講師,主研領域:軟件工程、數據庫技術。E-mail: march_dai@163.com
TP 311.1
A
1006-7167(2017)01-0132-04