燕麗紅+林志雄+楊星
摘要: Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面庫(kù),由挪威的TrollTech公司開(kāi)發(fā),能提供用于用戶應(yīng)用開(kāi)發(fā)的圖形界面及豐富的圖形庫(kù)。基于Windows 7操作系統(tǒng),采用嵌入式Qt技術(shù),C++語(yǔ)言進(jìn)行模塊化編程,設(shè)計(jì)了一款智能化的電子相冊(cè)。該相冊(cè)具有圖片加載、瀏覽、旋轉(zhuǎn)、放大與縮小、循環(huán)播放等基本功能。測(cè)試結(jié)果表明該設(shè)計(jì)具有人性化,操作簡(jiǎn)單等特點(diǎn)。
關(guān)鍵詞: Qt; Windows 7操作系統(tǒng); 模塊化編程; 電子相冊(cè)
中圖分類號(hào): TN911?34; TP273文獻(xiàn)標(biāo)識(shí)碼: A文章編號(hào): 1004?373X(2014)08?0030?02
Design of electronic photo album based on Windows 7 operating system and QT
YAN Li?hong1, LIN Zhi?xiong2, YANG Xing3
(1. Information Engineering College , Xian Eurasia Univisity, Xian , 710065, China;
2. Department of Electronics and Information Engineering, Putian University, Fujian, 351100, China;
3. Xian South Electronic Technology Co., Ltd, Xian, 710068, China )
Abstract: With the development of embedded technology, humanization and intelligent consumer electronics become more and more popular in people′s life. Qt provided by TrollTech Corporation in Norway is a cross?platform graphical user interface library of C++, which can provide visual graphic interface and rich graphics library for application program developers. An intelligent electronic photo album was designed by using Windows 7 operating system, QT embedded technology and modularization programming with C++ language. The electronic album has the basic functions of photo loading, browse, amplification, reduction, loop playback and so on. The testing result shows that the album has and is convenient to operate.
Keywords: QT; Windows 7 operating system; modularization programming; electronic albu
隨著電子電路集成化和計(jì)算機(jī)技術(shù)的快速發(fā)展,航空、醫(yī)療、消費(fèi)電子、汽車電子等眾多領(lǐng)域?qū)η度胧郊夹g(shù)應(yīng)用越來(lái)越廣泛。而作為消費(fèi)電子領(lǐng)域的產(chǎn)品電子相冊(cè)具有圖、文、聲、像并茂的表現(xiàn)手法,隨意修改編輯的功能,快速的檢索方式,永不褪色的恒久保存特性,以及廉價(jià)復(fù)制分發(fā)等傳統(tǒng)相冊(cè)無(wú)法比擬的優(yōu)越性,現(xiàn)在已得到現(xiàn)代人的青睞[1?4]。因此,采用嵌入式技術(shù),通過(guò)人機(jī)交互界面的建立進(jìn)行電子相冊(cè)設(shè)計(jì)就顯得很有十分必要。
1Qt開(kāi)發(fā)環(huán)境分析
Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面庫(kù)[5?8]。由挪威的TrollTech公司開(kāi)發(fā),目前已被Nokia收購(gòu)。Qt的主要特點(diǎn)有:面向?qū)ο螅苋菀讛U(kuò)展,且允許真正的組件編程;Qt對(duì)各個(gè)模塊進(jìn)行了良好的封裝,使各模塊可重用性較好;優(yōu)良的跨平臺(tái)特性,使用Qt類編寫的程序可以實(shí)現(xiàn) “一次編碼,到處編譯”,極大的降低了跨平臺(tái)開(kāi)發(fā)的難度(丁丁等,2004);持Windows,Linux,Solaris,SunOS,F(xiàn)reeBSD,BSD/OS,SCO,AIX,OS390,QNX 等操作系統(tǒng),面向?qū)ο蠛苋菀讛U(kuò)展。Qt提供了一種稱為 signals/slots?的安全類型來(lái)替代callback,具有良好的封裝機(jī)制,可重用性較好。同時(shí)包含近700API類庫(kù),允許真正的組件編程,是一種開(kāi)源軟件,使用起來(lái)簡(jiǎn)便且高效,具有良好的可移植性,目前主流的具有移植性的GUI API開(kāi)發(fā)包有miniGUI,Qt,OpenGUI。在Qt的應(yīng)用程序中,首先要進(jìn)行初始化設(shè)置,即首先是創(chuàng)建QApplication對(duì)象,QApplication類是負(fù)責(zé)圖形用戶界面的應(yīng)用程序的控制流和主設(shè)置。Qt軟件用戶界面如圖1所示。
int main( int argc, char **argv )
{
QApplication app( argc,argv );
......}
圖1 Qt軟件用戶界面
2基于Qt的電子相冊(cè)的設(shè)計(jì)
本文基于Windows 7操作系統(tǒng),采用Qt技術(shù),利用C++語(yǔ)言[9?11]進(jìn)行模塊化編程,設(shè)計(jì)了一款電子相冊(cè),具有瀏覽、旋轉(zhuǎn)、圖片切換以及放大縮小等功能,該電子相冊(cè)還支持jpg,png,gif和bmp等格式圖片的瀏覽。見(jiàn)圖2。
圖2 電子相冊(cè)功能結(jié)構(gòu)圖
2.1電子相冊(cè)的界面設(shè)計(jì)
本設(shè)計(jì)的電子相冊(cè)界面大小設(shè)定為1 024×500,界面的左側(cè)顯示圖片文件名列表(當(dāng)前瀏覽圖片名為藍(lán)色),寬度為200,右側(cè)為圖片顯示區(qū)域,圖片顯示區(qū)域的下方為圖片放大/縮小滑動(dòng)條。該相冊(cè)界面具有OPEN(打開(kāi)圖片文件)、ZOOMIN(縮小圖片)、ZOOMOUT(放大圖片)、LOOP(幻燈片循環(huán)模式顯示)、PAUSE(暫停)和QUIT(一鍵退出)等功能按鈕,界面如圖3所示。
相冊(cè)界面大小的設(shè)定程序代碼如下:
Window::Window()
{
setFixedSize( 1024,500 );
QSplitter *splitter = new QSplitter(Qt::Horizontal);
listwidget = new QListWidget();
listwidget?>setFixedWidth(200);
......
}
2.2圖片顯示功能設(shè)計(jì)
進(jìn)入電子相冊(cè)界面后,通過(guò)界面左側(cè)的顯示可以打開(kāi)計(jì)算機(jī)存儲(chǔ)圖片所在的文件夾,將從當(dāng)前目錄下掃描xpm,jpg,png,gif格式的圖片并將其名稱存入文件夾中,通過(guò)load函數(shù)來(lái)加載圖片到一個(gè)QImage類型變量中,然后將此變量和Label關(guān)聯(lián)起來(lái),最終在Label上顯示實(shí)現(xiàn)的圖片。打開(kāi)圖片的部分代碼如下:
void Photo::load(QString filename) //打開(kāi)圖片
{
pixmap.load(filename);
m_rect = rect();
update();
}
圖3 電子相冊(cè)界面設(shè)計(jì)
2.3圖片放大與縮小功能的設(shè)計(jì)
本設(shè)計(jì)可以在任意狀態(tài)下對(duì)圖片進(jìn)行縮小,同時(shí)能保證縮小的圖片還位居相冊(cè)的中間位置,在圖片非全屏模式與全屏模式兩種情況下都可以。圖片放大的部分程序代碼:
void Photo::zoomin() {
m_rect.setWidth(m_rect.width() ? m_rect.width()/100);
m_rect.setX((rect().width() ? m_rect.width()) / 2);
m_rect.setHeight(m_rect.height() ? m_rect.height()/100);
m_rect.setY((rect().height() ? m_rect.height()) / 2);
m_slider?>setValue(m_slider?>value()?1);
update();}
2.4循環(huán)顯示圖片功能設(shè)計(jì)
通過(guò)循環(huán)模式播放選中的圖片,可以使用戶很方便地進(jìn)行照片的選擇,節(jié)約時(shí)間。本設(shè)計(jì)通過(guò)下列代碼實(shí)現(xiàn)了幻燈片循環(huán)播放的功能:
loop = new QAction(Qicon
(":/images/loop.png"),"loop", this); //幻燈片循環(huán)
loop?>setEnabled(false);
connect(loop, SIGNAL(triggered()), this, SLOT(slotStart()));
QAction *stoploop = new QAction(QIcon(":/images/stop.png"), "pause", this);
connect(stoploop, SIGNAL(triggered()), this, SLOT(slotstop()));
3結(jié)語(yǔ)
嵌入式技術(shù)的快速發(fā)展,使得嵌入式產(chǎn)品已深入人們生活,電子相冊(cè)的出現(xiàn)打破了傳統(tǒng)相冊(cè)不易保存、瀏覽等問(wèn)題。本文采用嵌入式Qt技術(shù),C++語(yǔ)言編程設(shè)計(jì)了一款電子相冊(cè),可以實(shí)現(xiàn)圖片加載、瀏覽、放大與縮小等基本功能。該設(shè)計(jì)方案具有低耦合、高內(nèi)聚、可擴(kuò)展、操作簡(jiǎn)單等良好特點(diǎn)。下一步需要完善的是對(duì)圖片按要求裁剪、插入文字、加邊框等圖片編輯功能的設(shè)計(jì)。
參考文獻(xiàn)
[1] 袁媛,王延紅,江凌,等.基于Qt及OpenCASCADE的建模技術(shù)研究[J].現(xiàn)代電子技術(shù),2013,36(10):74?77.
[2] 史桂紅.XML及GDI+在便攜式電子相冊(cè)中的應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(3):161?165.
[3] 程博.基于嵌入式Qt的數(shù)字機(jī)頂盒圖形界面設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2009(11):45?46.
[4] 趙鵬.基于嵌入式Linux的MP3播放器的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2011(3):111?112.
[5] 蔡志明.精通Qt4編程[M].2版.北京:電子工業(yè)出版社,2011.
[6] 李艷民.基于Qt跨平臺(tái)的人機(jī)交互界面的研究和應(yīng)用[D].重慶:重慶大學(xué),2007.
[7] 李亞鋒,歐文盛.嵌入式系統(tǒng)開(kāi)發(fā)從入門到精通[M].北京:清華大學(xué)出版社,2007.
[8] 衰野,王宏遠(yuǎn).一種嵌入式系統(tǒng)中GUI的設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2006(1):9?11.
[9] 袁媛,王延紅,江凌,等.C++類庫(kù)Qt在數(shù)值模擬軟件開(kāi)發(fā)中的應(yīng)用[J].現(xiàn)代電子技術(shù),2010,33(2):80?83.
[10] 譚浩強(qiáng).C++面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:清華大學(xué)出版社,2006.
[11] BLANCHETTE Jasmin, SUMMERFIELD Mark. C++ GUI Programming with Qt4 [M]. 2版.北京:電子工業(yè)出版社,2008.
void Photo::load(QString filename) //打開(kāi)圖片
{
pixmap.load(filename);
m_rect = rect();
update();
}
圖3 電子相冊(cè)界面設(shè)計(jì)
2.3圖片放大與縮小功能的設(shè)計(jì)
本設(shè)計(jì)可以在任意狀態(tài)下對(duì)圖片進(jìn)行縮小,同時(shí)能保證縮小的圖片還位居相冊(cè)的中間位置,在圖片非全屏模式與全屏模式兩種情況下都可以。圖片放大的部分程序代碼:
void Photo::zoomin() {
m_rect.setWidth(m_rect.width() ? m_rect.width()/100);
m_rect.setX((rect().width() ? m_rect.width()) / 2);
m_rect.setHeight(m_rect.height() ? m_rect.height()/100);
m_rect.setY((rect().height() ? m_rect.height()) / 2);
m_slider?>setValue(m_slider?>value()?1);
update();}
2.4循環(huán)顯示圖片功能設(shè)計(jì)
通過(guò)循環(huán)模式播放選中的圖片,可以使用戶很方便地進(jìn)行照片的選擇,節(jié)約時(shí)間。本設(shè)計(jì)通過(guò)下列代碼實(shí)現(xiàn)了幻燈片循環(huán)播放的功能:
loop = new QAction(Qicon
(":/images/loop.png"),"loop", this); //幻燈片循環(huán)
loop?>setEnabled(false);
connect(loop, SIGNAL(triggered()), this, SLOT(slotStart()));
QAction *stoploop = new QAction(QIcon(":/images/stop.png"), "pause", this);
connect(stoploop, SIGNAL(triggered()), this, SLOT(slotstop()));
3結(jié)語(yǔ)
嵌入式技術(shù)的快速發(fā)展,使得嵌入式產(chǎn)品已深入人們生活,電子相冊(cè)的出現(xiàn)打破了傳統(tǒng)相冊(cè)不易保存、瀏覽等問(wèn)題。本文采用嵌入式Qt技術(shù),C++語(yǔ)言編程設(shè)計(jì)了一款電子相冊(cè),可以實(shí)現(xiàn)圖片加載、瀏覽、放大與縮小等基本功能。該設(shè)計(jì)方案具有低耦合、高內(nèi)聚、可擴(kuò)展、操作簡(jiǎn)單等良好特點(diǎn)。下一步需要完善的是對(duì)圖片按要求裁剪、插入文字、加邊框等圖片編輯功能的設(shè)計(jì)。
參考文獻(xiàn)
[1] 袁媛,王延紅,江凌,等.基于Qt及OpenCASCADE的建模技術(shù)研究[J].現(xiàn)代電子技術(shù),2013,36(10):74?77.
[2] 史桂紅.XML及GDI+在便攜式電子相冊(cè)中的應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(3):161?165.
[3] 程博.基于嵌入式Qt的數(shù)字機(jī)頂盒圖形界面設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2009(11):45?46.
[4] 趙鵬.基于嵌入式Linux的MP3播放器的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2011(3):111?112.
[5] 蔡志明.精通Qt4編程[M].2版.北京:電子工業(yè)出版社,2011.
[6] 李艷民.基于Qt跨平臺(tái)的人機(jī)交互界面的研究和應(yīng)用[D].重慶:重慶大學(xué),2007.
[7] 李亞鋒,歐文盛.嵌入式系統(tǒng)開(kāi)發(fā)從入門到精通[M].北京:清華大學(xué)出版社,2007.
[8] 衰野,王宏遠(yuǎn).一種嵌入式系統(tǒng)中GUI的設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2006(1):9?11.
[9] 袁媛,王延紅,江凌,等.C++類庫(kù)Qt在數(shù)值模擬軟件開(kāi)發(fā)中的應(yīng)用[J].現(xiàn)代電子技術(shù),2010,33(2):80?83.
[10] 譚浩強(qiáng).C++面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:清華大學(xué)出版社,2006.
[11] BLANCHETTE Jasmin, SUMMERFIELD Mark. C++ GUI Programming with Qt4 [M]. 2版.北京:電子工業(yè)出版社,2008.
void Photo::load(QString filename) //打開(kāi)圖片
{
pixmap.load(filename);
m_rect = rect();
update();
}
圖3 電子相冊(cè)界面設(shè)計(jì)
2.3圖片放大與縮小功能的設(shè)計(jì)
本設(shè)計(jì)可以在任意狀態(tài)下對(duì)圖片進(jìn)行縮小,同時(shí)能保證縮小的圖片還位居相冊(cè)的中間位置,在圖片非全屏模式與全屏模式兩種情況下都可以。圖片放大的部分程序代碼:
void Photo::zoomin() {
m_rect.setWidth(m_rect.width() ? m_rect.width()/100);
m_rect.setX((rect().width() ? m_rect.width()) / 2);
m_rect.setHeight(m_rect.height() ? m_rect.height()/100);
m_rect.setY((rect().height() ? m_rect.height()) / 2);
m_slider?>setValue(m_slider?>value()?1);
update();}
2.4循環(huán)顯示圖片功能設(shè)計(jì)
通過(guò)循環(huán)模式播放選中的圖片,可以使用戶很方便地進(jìn)行照片的選擇,節(jié)約時(shí)間。本設(shè)計(jì)通過(guò)下列代碼實(shí)現(xiàn)了幻燈片循環(huán)播放的功能:
loop = new QAction(Qicon
(":/images/loop.png"),"loop", this); //幻燈片循環(huán)
loop?>setEnabled(false);
connect(loop, SIGNAL(triggered()), this, SLOT(slotStart()));
QAction *stoploop = new QAction(QIcon(":/images/stop.png"), "pause", this);
connect(stoploop, SIGNAL(triggered()), this, SLOT(slotstop()));
3結(jié)語(yǔ)
嵌入式技術(shù)的快速發(fā)展,使得嵌入式產(chǎn)品已深入人們生活,電子相冊(cè)的出現(xiàn)打破了傳統(tǒng)相冊(cè)不易保存、瀏覽等問(wèn)題。本文采用嵌入式Qt技術(shù),C++語(yǔ)言編程設(shè)計(jì)了一款電子相冊(cè),可以實(shí)現(xiàn)圖片加載、瀏覽、放大與縮小等基本功能。該設(shè)計(jì)方案具有低耦合、高內(nèi)聚、可擴(kuò)展、操作簡(jiǎn)單等良好特點(diǎn)。下一步需要完善的是對(duì)圖片按要求裁剪、插入文字、加邊框等圖片編輯功能的設(shè)計(jì)。
參考文獻(xiàn)
[1] 袁媛,王延紅,江凌,等.基于Qt及OpenCASCADE的建模技術(shù)研究[J].現(xiàn)代電子技術(shù),2013,36(10):74?77.
[2] 史桂紅.XML及GDI+在便攜式電子相冊(cè)中的應(yīng)用[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(3):161?165.
[3] 程博.基于嵌入式Qt的數(shù)字機(jī)頂盒圖形界面設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2009(11):45?46.
[4] 趙鵬.基于嵌入式Linux的MP3播放器的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2011(3):111?112.
[5] 蔡志明.精通Qt4編程[M].2版.北京:電子工業(yè)出版社,2011.
[6] 李艷民.基于Qt跨平臺(tái)的人機(jī)交互界面的研究和應(yīng)用[D].重慶:重慶大學(xué),2007.
[7] 李亞鋒,歐文盛.嵌入式系統(tǒng)開(kāi)發(fā)從入門到精通[M].北京:清華大學(xué)出版社,2007.
[8] 衰野,王宏遠(yuǎn).一種嵌入式系統(tǒng)中GUI的設(shè)計(jì)[J].計(jì)算機(jī)與數(shù)字工程,2006(1):9?11.
[9] 袁媛,王延紅,江凌,等.C++類庫(kù)Qt在數(shù)值模擬軟件開(kāi)發(fā)中的應(yīng)用[J].現(xiàn)代電子技術(shù),2010,33(2):80?83.
[10] 譚浩強(qiáng).C++面向?qū)ο蟪绦蛟O(shè)計(jì)[M].北京:清華大學(xué)出版社,2006.
[11] BLANCHETTE Jasmin, SUMMERFIELD Mark. C++ GUI Programming with Qt4 [M]. 2版.北京:電子工業(yè)出版社,2008.