軟件系統(tǒng)分析與設(shè)計(jì)實(shí)訓(xùn)教學(xué)全套課件教程07《策略為王的用戶(hù)界面實(shí)現(xiàn)分析_第1頁(yè)
已閱讀1頁(yè),還剩78頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、股票分析技術(shù)與軟件實(shí)現(xiàn)-07,《策略為王》的用戶(hù)界面實(shí)現(xiàn)與分析,1、回顧:VC++6.0有關(guān)用戶(hù)界面實(shí)現(xiàn)的回顧2、用戶(hù)界面設(shè)計(jì)的框架技術(shù)介紹3、StkUI所使用的外部框架GuiToolkit介紹4、StkUI的用戶(hù)界面實(shí)現(xiàn)5、Qt5用戶(hù)界面框架介紹與案例系統(tǒng)分析6、基于Qt5+VS2010+VC++的系統(tǒng)移植與開(kāi)發(fā),本節(jié)課程的主要內(nèi)容,一、VC++6.0有關(guān)用戶(hù)界面實(shí)現(xiàn)的回顧,二、用戶(hù)界面設(shè)計(jì)的框架技術(shù)介紹,1、StkUI使用

2、了3個(gè)界面庫(kù),即:GuiLib、ProfUISdll和XPFace。// ProfUIS#include"../ProfUIS/Include/Prof-UIS.h“// GuiLib#include"../GuiLib/Header/ExtLib.h“// XPFace// #defineSPFACE_STATIC#include"../XPFace/Include/XPFace.h

3、“GuiLib和ProfUISdll的下載 GuiLib和ProfUISdll都可以從http://www.codeproject.com/ GuiLib下載地址:http://www.codeproject.com/library/guitoolkit.asp ProfUISdll下載地址: http://www.codeproject.com/docking/prod_profuis.asp如果以

4、后網(wǎng)站有變動(dòng),可以通過(guò)www.google.com搜索guilib和profuisdll找到。XPFace沒(méi)有找到下載地址,大家有興趣的話(huà),自己找找。,三、StkUI所使用的外部框架介紹,2、ProfUISdll的使用 StkUI3.0版只使用了ProfUISdll的colorbutton和顏色選擇對(duì)話(huà)框,從資源文件中可以看出(右圖)也就是在顏色設(shè)置對(duì)話(huà)框(通過(guò)菜單“選項(xiàng)=〉顏色設(shè)定...”啟動(dòng)該對(duì)話(huà)框)中使用。,Stk

5、UI所使用的外部框架介紹,那么,看一下ExtColorDlg.cpp的代碼,就知道在具體這個(gè)窗口的處理上,使用外部框架提供的類(lèi)和方法,實(shí)現(xiàn)了哪些具體的功能。其中的方法,是直接針對(duì)這個(gè)窗口的哪些按鈕功能的。從某種意義上說(shuō),框架就是把一組窗口按鈕,打了一個(gè)包而已。,StkUI所使用的外部框架介紹,StkUI3.0版中將2.0版中使用的ProfUISdll menu和toolbar的代碼都注釋掉了,在工程StkUI中搜索ProfUIS即可

6、找到這些被注釋掉的代碼。分析被替換的代碼,可以知道使用或不使用框架的差別:/* ProfUIS Using Code if( pMainFrame && pMainFrame->m_wndMenuBar.TranslateMainFrameMessage(pMsg) )return TRUE;*/這是被替換掉的原代碼 return CMDIChildWnd::PreTranslateM

7、essage(pMsg);// 這是現(xiàn)在使用的代碼簡(jiǎn)單查看一下:原先的TranslateMainFrameMessage()和現(xiàn)在的PreTranslateMessage()兩個(gè)方法的定義,前者的定義指向ProfUIS/include/ExtMenuControlBar.h,而后者的定義指向microsoft visual studio/vc98/mfc/include,也就是說(shuō),后者是標(biāo)準(zhǔn)的MFC調(diào)用了。3.0版用MFC取代了

8、原先的ProfUISdll庫(kù)函數(shù)的使用。,StkUI所使用的外部框架介紹,既然如此,不如把涉及ProfUISdll的地方都去掉!StkUI就與ProfUISdll工程無(wú)關(guān)了。是的。,3、GuiLib庫(kù)的使用 StkUI3.0版使用了GuiLib界面庫(kù)的界面框架、菜單條、工具條。在工程StkUI中搜索Gui即可找到這些使用GuiLib的代碼。主要使用的類(lèi)庫(kù) CGuiMDIFrame: CMainFrame

9、從該類(lèi)繼承。 CGuiToolBarWnd: ToolBar為該類(lèi)的對(duì)象。 CGuiControlBar, 左側(cè)功能樹(shù)為CWorkspBar的對(duì)象,CWorkspBar從CGuiControlBar繼承,CWorkspBar在工程XPFace中實(shí)現(xiàn)。  CGuiComboBoxExt和CGuiEdit: 另外在很多對(duì)話(huà)框中使用,其功能完全等同于CComboBox和Cedit。&

10、#160; CGuiTabPowerPoint: 在GraphView和RealTimeView中,右下角的tab使用的是這個(gè)類(lèi)。 CGuiWorkTab: 在SListView中,下方的tab使用的是這個(gè)類(lèi)。,StkUI所使用的外部框架介紹,4、XPFace工程  CDeclareDlg:聲明對(duì)話(huà)框 CWaitDlg:等待對(duì)話(huà)框,顯示進(jìn)度條和取消按鈕 CXFPropertyS

11、heetEx:屬性頁(yè)對(duì)話(huà)框,可以顯示上方位圖 CPathDialog:選擇路徑對(duì)話(huà)框 CStringDialog:輸入字符串對(duì)話(huà)框 CHyperLink:超級(jí)鏈接,從CStatic繼承,點(diǎn)擊后進(jìn)入指定網(wǎng)址 CClickLink:超級(jí)鏈接,從CHyperLink繼承,點(diǎn)擊后執(zhí)行制定操作 CMagicDlg,CMagicEdit:實(shí)現(xiàn)自定義指標(biāo)編輯時(shí)的下拉選擇ListBox CSplashDl

12、g:?jiǎn)?dòng)對(duì)話(huà)框 CTextToolBar:從CGuiToolBarWnd繼承,實(shí)現(xiàn)帶文字標(biāo)簽的工具條 CWorkspBar:從CGuiControlBar繼承,實(shí)現(xiàn)左邊功能樹(shù) CXFDialog:對(duì)話(huà)框基類(lèi),實(shí)現(xiàn)半透明效果 CKSFileDialog:文件對(duì)話(huà)框  其余類(lèi)未使用。,StkUI所使用的外部框架介紹,1、StkUI的系統(tǒng)啟動(dòng)窗口處理過(guò)程:在BOOL CStkUIApp::

13、InitInstance()過(guò)程(STKUI的標(biāo)準(zhǔn)初始化開(kāi)始)中,在一系列準(zhǔn)備處理(取得軟件/用戶(hù)合法性、取INI文件、清空緩存等)后,StkUI系統(tǒng)首先打開(kāi)系統(tǒng)的第一個(gè)界面。,5、StkUI的窗口實(shí)現(xiàn),代碼從這里開(kāi)始:// Create MainFrame 創(chuàng)建主窗口和子窗口,首先顯示的服務(wù)器連接窗口,是這樣實(shí)現(xiàn)的:// Show Startup Window 服務(wù)器連接(online/offline選擇) extern BO

14、OL CALLBACK LoadProgram( HWND hWnd, int nMinProgress, int nMaxProgress ); //回調(diào)函數(shù)實(shí)現(xiàn)視圖顯示CStartupDlgstartup; //startup是窗口名,也就是系統(tǒng)的第一個(gè)啟動(dòng)窗口,5、StkUI的窗口實(shí)現(xiàn),這里,采用的是所謂回調(diào)函數(shù)的方法。 回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針

15、被用為調(diào)用它所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)。因?yàn)榭梢园颜{(diào)用者與被調(diào)用者分開(kāi)。調(diào)用者不關(guān)心誰(shuí)是被調(diào)用者,它需知道的,只是存在一個(gè)具有某種特定原型、某些限制條件(如返回值為int)的被調(diào)用函數(shù)。,,Startup窗口的實(shí)現(xiàn)過(guò)程:執(zhí)行回調(diào)函數(shù):CALLBACK LoadProgram( HWND hWnd, int nMinProgress, int nMaxProgress )并調(diào)用startup窗口的處理函數(shù)startupDl

16、g.app。CStartupDlg處理與該窗口有關(guān)的所有事件。如:連接、脫機(jī)、添加、修改、刪除等。其他窗口的分析,在相應(yīng)部分進(jìn)行。,5、StkUI的窗口實(shí)現(xiàn),要建立自己的視圖窗口并加入StkUI中,需完成以下幾步:1、創(chuàng)建自己的視圖//使用MFC或外部控件2、在視圖頭文件中定義消息處理函數(shù)如: afx_msg LRESULT OnGetViewTitle( WPARAM wParam, LPARAM lParam

17、); //當(dāng)視圖/窗口/控件/鼠標(biāo)事件發(fā)生時(shí),傳出消息3、在視圖實(shí)現(xiàn)文件中定義消息映射: ON_MESSAGE(WM_USER_GETVIEWTITLE, OnGetViewTitle);//并實(shí)現(xiàn)處理函數(shù);處理函數(shù)是要自己寫(xiě)的4、在CStkUIApp::InitInstance過(guò)程中調(diào)用的LoadProgram過(guò)程中加入自己創(chuàng)建的視圖的命令:   if( !pStaticDoc->

18、;GetViewIfExist( RUNTIME_CLASS(yourView) ) ) ;     pStaticDoc->ShowStaticView( RUNTIME_CLASS(yourView), TRUE );,6、在StkUI中加入自己的窗口,練習(xí):在StkUI中創(chuàng)建一個(gè)新窗口,在窗口中顯示一些信息或顯示一個(gè)曲線(xiàn),添加一些事件按鈕,并對(duì)事件作出簡(jiǎn)單處理。在

19、StkUI系統(tǒng)菜單上,為彈出這個(gè)窗口,添加一個(gè)選項(xiàng)。注意:以上代碼只是實(shí)例。,7、STKUI的菜單,1、系統(tǒng)的主菜單,如下圖所示例,對(duì)應(yīng)程序中的資源為IDR_MAINFRAME,CMainFrame* CMainFrame::CreateNewFrame( ){CRuntimeClass* pFrameClass = RUNTIME_CLASS(CMainFrame);CMainFrame* pFrame = (CMainF

20、rame*)pFrameClass->CreateObject();if (pFrame == NULL){TRACE1("Warning: Dynamic create of frame %hs failed.\n",pFrameClass->m_lpszClassName);return NULL;}ASSERT_KINDOF(CMainFrame, pFrame)

21、;// create new from resourceif (!pFrame->LoadFrame(IDR_MAINFRAME) ) //載入主菜單資源{TRACE0("Warning: Couldn't create a frame.\n");// frame will be deleted in PostNcDestroy cleanupreturn NULL;

22、這部分的代碼是MFC標(biāo)準(zhǔn)代碼,在創(chuàng)建項(xiàng)目時(shí)生成。,7、STKUI的菜單,1、系統(tǒng)的主菜單,如下圖所示例,對(duì)應(yīng)程序中的資源為IDR_MAINFRAME,系統(tǒng)主菜單的作用:代表系統(tǒng)功能模塊的第一層(最高層)點(diǎn)擊進(jìn)入第二層、第三層……(進(jìn)入各級(jí)子菜單)這種模式是MFC基于窗口應(yīng)用的典型運(yùn)行(功能)架構(gòu)系統(tǒng)功能按層次、“樹(shù)型”結(jié)構(gòu)安排“樹(shù)”的最后的“葉(節(jié)點(diǎn))”就是具體“功能”注意:實(shí)現(xiàn)功能并非只有點(diǎn)擊“樹(shù)”的“葉”節(jié)點(diǎn),這也是這種

23、架構(gòu)的缺點(diǎn)所在——交叉關(guān)系比較復(fù)雜如果層次不多的話(huà)、易于理解系統(tǒng)構(gòu)成,7、STKUI的工具條,1、StkUI有5個(gè)常用工具條,如下圖:,載入對(duì)應(yīng)的5個(gè)工具條資源代碼實(shí)現(xiàn)有些是繼承自MFC的,有些是XPFace后面分析,7、STKUI的工具條,1、2個(gè)中文工具條,如下圖所示例,這兩個(gè)資源在哪里?,除了菜單、工具條之外,就是窗口了。STKUI有3大窗口:策略選擇、行情分析、實(shí)時(shí)數(shù)據(jù),8、STKUI的窗口,除行情外,其他兩個(gè)窗口都可以

24、被關(guān)掉,8、STKUI的窗口,,最左邊的是策略窗口,是一個(gè)典型的3組“樹(shù)型”展示結(jié)構(gòu)每組提供一類(lèi)選擇界面(策略選擇、股票分組選擇、指標(biāo)選擇等)5,6,7所在的是一個(gè)控制條窗口,控制條通常為父框架窗口的子窗口,因此它是框架窗口客戶(hù)端視圖或 MDI 客戶(hù)端的“同輩”??刂茥l對(duì)象使用其父窗口的工作區(qū)信息來(lái)定位自己,然后它改變父窗口的剩余工作區(qū)窗口,以便客戶(hù)端視圖或 MDI 客戶(hù)端窗口填充客戶(hù)端窗口的剩余部分。,5、6、7是特殊的工具條(

25、子窗口)該控制條為:CWorkspBar  m_wndWorkspBar;在這個(gè)窗口內(nèi)管理了以下三個(gè)視圖: CStragegyView   -----策略選擇 CGroupView       -----分組選擇 CTechsView       ----

26、-指標(biāo)選擇左側(cè)功能樹(shù)為CWorkspBar的對(duì)象,CWorkspBar從CGuiControlBar繼承, CWorkspBar在工程XPFace中實(shí)現(xiàn).,8、STKUI的窗口,,同樣:在實(shí)時(shí)數(shù)據(jù)窗口,也有參數(shù)、成本、火焰山、活躍4個(gè)子窗口與策略窗口不同的是,選擇4個(gè)窗口之一后,立即得到相應(yīng)的展示結(jié)果,選擇火焰山,立即顯示該股當(dāng)前的火焰山圖形,,最中間的,就可以稱(chēng)為“行情”窗口行情窗口也有9個(gè)子窗口選擇,分別是8~16。對(duì)應(yīng)的功能

27、是: 8-----CWizardView      -----向?qū)?9-----CSimuView        -----策略10-----CSListView       -----股票列表11-----CRealTimeView&

28、#160;  -----實(shí)時(shí)行情,12-----CMultiSortView   -----綜合排名13-----CGraphView       ----技術(shù)圖表14-----CBaseView        ----基本信息15-----CInfoVi

29、ew        ----在線(xiàn)資訊,8、STKUI的窗口,,相關(guān)的程序?qū)崿F(xiàn)如下:CMainFrame::OnCreate函數(shù)中,有如下的調(diào)用實(shí)現(xiàn)了上面控制條的初始化和顯示。 1、創(chuàng)建工具條 // Create ToolBars if( !CreateMenuBar( ) || !CreateMainBar( )

30、60; || !CreateViewBar( ) || !CreatePeriodBar( )  || !CreateSListBar( ) || !CreateSimuBar( )  || !CreateStatusBar( ) || !CreateWorkspBar( ) ) {  return -1;   

31、0;  // failed to create },8、STKUI的窗口,,2、沿框架四周創(chuàng)建??繖?。注意:容易被忽視的一點(diǎn),控制條能夠沿框架窗口??咳Q于框架窗口沿邊框四周創(chuàng)建的4個(gè)統(tǒng)一的控制條,即??繖?。沒(méi)有控制條來(lái)??繒r(shí),??繖谘貞?yīng)用程序主窗口縮小到不可見(jiàn),當(dāng)控制條??吭谶吙驎r(shí),??繖诰驼归_(kāi)并包圍這些控制條。CFrameWnd的成員函數(shù)EnableDocking()沿框架窗口創(chuàng)建這4個(gè)??繖?。

32、但是,??抗δ懿皇亲詣?dòng)地被MFC啟動(dòng)的,在CMainFrame::OnCreate()中,需要調(diào)用EnableDocking()才能進(jìn)行工具欄的??坎僮?。 // Enable Docking EnableDocking(CBRS_ALIGN_ANY);有關(guān)??康脑O(shè)置,見(jiàn)程序注釋?zhuān)辉倭_列。,8、StkUI的多視圖管理,,對(duì)于多視圖的管理,沒(méi)有通過(guò)CDocumentTemplate進(jìn)行(見(jiàn)王育堅(jiān)教材5.6.2多

33、視圖),而是通過(guò)CDocument的派生類(lèi)CStaticDoc進(jìn)行。因?yàn)镃Document本身的函數(shù)GetFirstViewPosition和GetNextView提供了對(duì)于多個(gè)View進(jìn)行管理的能力。同時(shí),在CView::OnCreate函數(shù)中,View會(huì)將自身添加到Document中。在CStaticDoc::ShowStaticView函數(shù)中,通過(guò)context.m_pCurrentDoc = this指定了Document

34、,這樣,就可以對(duì)于View進(jìn)行相應(yīng)的管理了。在App類(lèi)中通過(guò)靜態(tài)函數(shù)創(chuàng)建CStaticDoc實(shí)例,然后通過(guò)ShowStaticView創(chuàng)建相應(yīng)的View。下面的回調(diào)函數(shù)是實(shí)現(xiàn)了視圖的顯示功能. BOOL CALLBACK LoadProgram( HWND hWnd, int nMinProgress, int nMaxProgress ),8、StkUI的多視圖管理,,視圖顯示的回調(diào)函數(shù)實(shí)現(xiàn):BOOL CALLBACK

35、 LoadProgram( HWND hWnd, int nMinProgress, int nMaxProgress ){int nMin = nMinProgress; int nMax = nMaxProgress; int nRange = nMaxProgress-nMinProgress; CStkUIApp * pApp = AfxGetStkUIApp(); if( N

36、ULL == pApp )  return FALSE; CStaticDoc * pStaticDoc = pApp->GetStaticDoc(); //以下賦予顯示窗口的文檔對(duì)象等指針 CMainFrame * pMainFrame = AfxGetMainFrame(); HINSTANCE hInstanceOld = AfxGetResourceHandle(

37、); AfxSetResourceHandle( AfxGetInstanceHandle() ); SendMessage( hWnd, WM_USER_STARTUP_PROGRESS, nMin, 0 ); AfxGetStockContainer().Load( &AfxGetDB(), NULL, NULL ); BOOL CALLBACK LoadProgram( HW

38、ND hWnd, int nMinProgress, int nMaxProgress )……,8、StkUI的多視圖管理,,視圖顯示的回調(diào)函數(shù)實(shí)現(xiàn):BOOL CALLBACK LoadProgram( HWND hWnd, int nMinProgress, int nMaxProgress ){……// Show Views 顯示窗口 if( !pStaticDoc->GetViewIfExist( R

39、UNTIME_CLASS(CWizardView) ) )  pStaticDoc->ShowStaticView( RUNTIME_CLASS(CWizardView), TRUE ); SendMessage( hWnd, WM_USER_STARTUP_PROGRESS, nMin+nRange*14/30, 0 ); if( !pStaticDoc->GetViewIfE

40、xist( RUNTIME_CLASS(CSimuView) ) )  pStaticDoc->ShowStaticView( RUNTIME_CLASS(CSimuView), TRUE ); SendMessage( hWnd, WM_USER_STARTUP_PROGRESS, nMin+nRange*16/30, 0 );……,,如紅色方框標(biāo)出的窗口,就是右圖的窗口:,9、在VC++6.

41、0+QT4環(huán)境下重建《策略為王》,,二次開(kāi)發(fā):使用QT4的界面框架,重新實(shí)現(xiàn)《策略為王》以VC++6.0為主(是VC++6.0的項(xiàng)目,而不是QT4的項(xiàng)目)界面使用QT4,多種導(dǎo)入方案:在VC++6.0中安裝QT的插件在VC++6.0中繼承QT4的類(lèi),使用QT4的代碼將QT4界面打包成dll,在VC++6.0中使用原《策略為王》部分代碼的移植:哪些與原環(huán)境無(wú)關(guān)(可直接移用)數(shù)據(jù)接口?哪些可以修改后使用行情曲線(xiàn)/技術(shù)指標(biāo)

42、的算法哪些需要重新開(kāi)發(fā)用戶(hù)界面窗口事件曲線(xiàn)繪制,四、QT4安裝,,下載地址:http://download.qt.io/archive/qt/4.8/4.8.6/1)選擇下載QT庫(kù):頭兩個(gè)是VS2010和VS2008編譯而成的Qt庫(kù),第三個(gè)是MinGW版本Qt庫(kù)。dmg結(jié)尾的兩個(gè)是MacOS系統(tǒng)里使用的Qt庫(kù),qt-everywhere-opensource-src-4.8.6是Qt源碼包,有zip和tar.gz兩個(gè)壓縮格式的

43、,兩個(gè)內(nèi)容是一樣的,只是zip一般在Windows下比較流行,tar.gz是Linux上流行的壓縮格式。,md5sums-4.8.6是以上文件的校驗(yàn)和,changes-4.8.6是Qt版本日志文件。,2)下載MinGW:qt-opensource-windows-x86-mingw482-4.8.6-1.exe:http://download.qt.io/archive/qt/4.8/4.8.6/qt-opensource-windo

44、ws-x86-mingw482-4.8.6-1.exe,四、 QT4安裝,,Qt5.4.0安裝包已經(jīng)帶有QtCreator,如果是裝Qt5.4.0就不需要下載。我們裝4.8.6的,這里要下載“Qt Creator 3.3.0 for Windows (71 MB)”,點(diǎn)擊下載即可。3)下載鏈接:http://mirrors.hust.edu.cn/qtproject/official_releases/qtcreator/3.3/3

45、.3.0/qt-creator-opensource-windows-x86-3.3.0.exe,四、 QT4安裝,,其他有用的工具①gdb是針對(duì)Android開(kāi)發(fā)的調(diào)試器。②jom可以百度一下,http://qt-project.org/wiki/jom ,是nmake克隆版,支持多條獨(dú)立命令并行構(gòu)建軟件,加快軟件構(gòu)建速度。③online_installers是在線(xiàn)安裝器。④Pyside是用于支持Python語(yǔ)言編寫(xiě)Qt程序的

46、。⑤qbs是Qt Build Suite (QBS) ,http://qt-project.org/wiki/qbs,QBS是新創(chuàng)的Qt程序生成工具,因?yàn)镼t一般使用qmake來(lái)生成項(xiàng)目進(jìn)行編譯,qmake必須根據(jù)qt版本變化而變化,不便于管理,qt開(kāi)發(fā)者對(duì)qmake又愛(ài)又恨,因此創(chuàng)建了不依賴(lài)Qt版本的生成工具QBS。⑥qt,當(dāng)然是qt庫(kù)本身了,從4.8到5.4都有。⑦qt-installer-framework,百度一下是什么,

47、http://blog.csdn.net/cnsword/article/details/8740393,是專(zhuān)門(mén)用于發(fā)布開(kāi)發(fā)好的程序用的,生成程序安裝器,可以為L(zhǎng)inux、Windows、MacOS生成安裝器。Qt自己的QtCreator、QtSDK等安裝程序就是使用qt-installer-framework打包的。⑧qtcreator是集成開(kāi)發(fā)環(huán)境,從2.5到3.3版本都有。⑨vsaddin,是針對(duì)VisualStudio的Qt

48、開(kāi)發(fā)插件。,四、 QT4安裝,,下載了三個(gè)東西:Qt庫(kù)、MinGW、qt-creator安裝順序:Qt庫(kù)需要MinGW,而qtcreator需要配置前面二者,所以1)先安裝MinGW,2)再安裝qt-opensource-windows-x86-mingw482-4.8.6-1,3)最后裝QtCreator。(1)MinGW安裝這個(gè)是綠色版的,直接解壓縮到C盤(pán)根目錄就行了,放到其他分區(qū)也是可以的。只要后面指定了正確位置就行了,這

49、里解壓后路徑是:d:\Qt\mingw32,g++位置是d:\Qt\mingw32\bin\g++.exe。,四、 QT4安裝,,(2)Qt庫(kù)安裝運(yùn)行qt-opensource-windows-x86-mingw482-4.8.6-1.exe,這個(gè)包比較大,解壓時(shí)間長(zhǎng)一些,等一陣子會(huì)進(jìn)入安裝界面:一路yes下去,其中選擇安裝路徑,選d:\Qt(與上一個(gè)安裝路徑保持一致)即可。(3)QtCreator安裝如果想從命令行編譯Qt程序

50、,上面環(huán)境已經(jīng)夠了。當(dāng)然現(xiàn)在都是可視化開(kāi)發(fā)的,就要裝QtCreator集成開(kāi)發(fā)環(huán)境,因?yàn)镼tCreator使用起來(lái)方便快捷。運(yùn)行qt-creator-opensource-windows-x86-3.3.0.exe,也是一路下去,沒(méi)有什么太多的選擇。,四、 QT4安裝,,(4)QtCreator配置因?yàn)镼tCreator還沒(méi)有配置,這時(shí)候是不能編譯程序的。打開(kāi)QtCreator菜單“工具”-->“選項(xiàng)”,在對(duì)話(huà)框左邊選“構(gòu)

51、建和運(yùn)行”:編譯Qt程序必須配置好幾個(gè)東西才行,需要配置的是:構(gòu)建套件(Kit)、QtVersions、編譯器、Debuggers。①Debuggers進(jìn)入Debuggers選項(xiàng)卡,選擇添加:,把Name設(shè)為GDB,然后點(diǎn)擊Path一行最右邊的“瀏覽”,找到gdb.exe的位置,設(shè)置好后點(diǎn)擊右下角的“Apply”,就設(shè)置了調(diào)試器。,四、 QT4安裝,,②編譯器點(diǎn)擊右邊“添加”,彈出菜單有MinGW、GCC、Clang、Cust

52、om和QCC,選擇MinGW,,名稱(chēng)設(shè)為MinGW,對(duì)于編譯器路徑設(shè)置,就瀏覽找到g++.exe,設(shè)置好這兩條就夠了,然后點(diǎn)擊右下角“Apply”。,四、 QT4安裝,,③Qt Versions點(diǎn)擊“添加”,彈出的文件查找框,是要選擇qmake.exe位置,之前裝的位置是:C:\Qt\4.8.6\bin\qmake.exe,選中qmake.exe,點(diǎn)擊打開(kāi),然后Qt版本會(huì)自動(dòng)檢測(cè):,點(diǎn)擊“Apply”就配置好Qt庫(kù)了。,四、 QT4安

53、裝,,④構(gòu)建套件(Kit),之前配置的三個(gè)最后都是為構(gòu)建套件服務(wù)的,需要在這里面選擇之前配好的三個(gè):編譯器選擇“MinGW”、調(diào)試器選擇“GDB”、Qt版本選擇“Qt 4.8.6(4.8.6)”,Qt mkspec可以不用管,因?yàn)閝make.exe可以自動(dòng)定。配置好編譯器、調(diào)試器和Qt版本之后,點(diǎn)擊“Apply”,再點(diǎn)擊“OK”。終于配置好了。,四、 QT4安裝,,然后就可以新建一個(gè)項(xiàng)目,選擇“Qt Widgets Applicatio

54、n”,都用默認(rèn)的項(xiàng)目設(shè)置,一直點(diǎn)擊下一步,然后點(diǎn)“完成”,看到代碼:,點(diǎn)擊左下角倒數(shù)第三個(gè)圖標(biāo),就是純?nèi)切文莻€(gè):程序就能正常編譯跑起來(lái)了。,四、 QT4安裝,,配置:添加3個(gè)環(huán)境變量,依次如下:1)QTDIR用戶(hù)變量(假設(shè)你的Qt安裝在d:\Qt\4.8.6目錄下),在系統(tǒng)變量或用戶(hù)變量中(均可),新建一個(gè)變量“QTDIR”,具體內(nèi)容是d:\Qt\4.8.6。也可以不用,因?yàn)橄旅嬖O(shè)置路徑時(shí),就直接使用直接地址,而不是依賴(lài)QTDIR的

55、相對(duì)地址。2)添加QMAKESPEC變量,變量值為d:\Qt\4.8.6\mkspecs\win32-msvc****,****為2003/2005/2008/2010/2012/2013,顯然,這一串?dāng)?shù)字就是VS的版本,VC++6.0是20033)在用戶(hù)變量中,為變量path, 添加如下路徑(注意是添加):…..; d:\Qt\4.8.6\bin;d:\Qt\4.8.6\lib; 在系統(tǒng)變量中,添加p

56、ath: d:\Qt\mingw32\bin;”,注意我的mingw32的安裝路徑直接是Qt下面。4)msvc編譯器的環(huán)境變量:通常安裝好VC++6.0后,環(huán)境變量就已經(jīng)配置好。如果它的環(huán)境變量丟失,可以到VC的安裝目錄的Bin目錄中,執(zhí)行VCVARS32.BAT批處理文件即可恢復(fù)。5)不重新啟動(dòng)系統(tǒng)讓系統(tǒng)變量立即有效的方法:在DOS命令行窗口,輸入:set path=c:,關(guān)閉窗口,再打開(kāi)看看?,四、創(chuàng)建項(xiàng)目,

57、,在開(kāi)始|程序|QT by Digia v4.8.6目錄下,選擇Qt4.8.6 Command PromptQT命令行窗口中使用qmake創(chuàng)建VC項(xiàng)目文件1、我們選擇在d:\Qt目錄下創(chuàng)建一個(gè)文件夾qt4exampleD:\Qt\>mkdir qt4example2、進(jìn)入qt4example目錄,創(chuàng)建一個(gè)空的cpp文件qt4test.cppcd qt4exampleecho > qt4test.cpp看一下當(dāng)前

58、目錄下,有一個(gè)cpp文件了。,四、 QT4安裝,,3、創(chuàng)建一個(gè)和平臺(tái)無(wú)關(guān)的項(xiàng)目文件qt4example.pro,請(qǐng)輸入:qmake -project4、根據(jù)項(xiàng)目文件qt4example.pro創(chuàng)建一個(gè)平臺(tái)特定的Makefile,請(qǐng)輸入:qmake qt4example.pro5、我們希望使用VC++來(lái)編輯源代碼,所以再創(chuàng)建一個(gè)VC++的項(xiàng)目文件,請(qǐng)輸入qmake -t vcapp -o qt4example.dsp qt4e

59、xample.pro看一下結(jié)果:,四、 QT4安裝,,6、啟動(dòng)VC++6.0IDE,打開(kāi)qt4test.cpp,然后編寫(xiě)源代碼,并將其保存。請(qǐng)輸入: #include #include int main(int argc, char *argv[]){QApplication app(argc, argv);QWidget *widget = new QWidget( 0 );//app.setMainWidget(

60、widget ); //QT4已不需要用此語(yǔ)句,當(dāng)窗口關(guān)閉時(shí),原使用此語(yǔ)句使程序退出內(nèi)存,現(xiàn)直接刪去。查一下進(jìn)程可 驗(yàn)證是否如此。widget->show();return app.exec();},,7、 在QT命令行窗口中編譯程序,請(qǐng)輸入:nmake(商用版QT情況下)或者:mingw32-make(共享版,居然還有這個(gè)差別,折騰了很久)如果報(bào)錯(cuò)說(shuō)找不到mingw32-make,則是path 設(shè)置錯(cuò)誤(路徑最好設(shè)

61、置為系統(tǒng)變量,而不是用戶(hù)變量),先臨時(shí)設(shè)置一下:Set path=d:\Qt\mingw32-make,然后再試一下:mingw32-make 在d:\Qt\qt4example\debug目錄下,可以看見(jiàn)生成了qt4example.exe,,在win窗口中運(yùn)行qt4example.exeOk!窗口出來(lái)了。,,三、編寫(xiě)基于QObject的Qt類(lèi) 在上面的代碼基礎(chǔ)上,添加兩個(gè)Qt類(lèi),并添加信號(hào)和槽。3.1 添

62、加一個(gè)新類(lèi)1、新建myclass.h #include class AClass : public Qobject //為了定義類(lèi)的信號(hào)和曹,必須繼承QT的Qobject{Q_OBJECTpublic slots: //定義處理A信號(hào)的曹void theSlot();signals:void theSignal(); //定義A信號(hào)};class BClass : public Qobject //同上{

63、Q_OBJECTpublic slots:void theSlot();};,2、新建myclass.cpp文件#include "myclass.h"#include void AClass::theSlot(){QMessageBox::information( 0, "AClass", "AClass::theSlot()" );emit theSig

64、nal(); //定義 A窗口OK事件的曹,A窗口按下OK鍵發(fā)出信息給B}void BClass::theSlot(){QMessageBox::information( 0, “BClass”, “BClass::theSlot()” ); //B出口的曹,不做任何事情},3、修改qt4test.cpp文件#include #include #include #include "myclass.h"

65、;int main(int argc, char **argv){QApplication app(argc, argv);QWidget *widget = new QWidget( 0 );QPushButton *button = new QPushButton( widget); //彈出主窗口button->setText( “Press Me” ); //主窗口有一個(gè)按鈕PressMeAClass *a

66、= new AClass; //創(chuàng)建A窗口對(duì)象BClass *b = new BClass; //創(chuàng)建B窗口對(duì)象QObject::connect( button, SIGNAL(clicked()), a, SLOT(theSlot()) ); //主窗口按鈕按下,發(fā)信號(hào)給A窗口QObject::connect( a, SIGNAL(theSignal()), b, SLOT(theSlot()) ); //A窗口按鈕按下,發(fā)信

67、號(hào)給B窗口//app.setMainWidget( widget );widget->show();return app.exec(); //如果將a,b類(lèi)及Qobject封裝成dll,如何?},4、編譯Mingw32-make5、運(yùn)行,結(jié)果是:點(diǎn)一下:再點(diǎn)一下OK按鈕:最后點(diǎn)一下OK,上述結(jié)果展示了QT的所謂基于窗口的消息和曹的作用!,主窗口的按鈕Press向A窗口的曹發(fā)出信號(hào),A出口的

68、OK按鈕向B窗口的曹發(fā)出信號(hào),B窗口不發(fā)出任何信號(hào),QT窗口界面在VC++6.0項(xiàng)目中的應(yīng)用,將QT窗口界面封裝成dll,在VC++6.0項(xiàng)目中的應(yīng)用,注意:這里說(shuō)的是用QT封裝一個(gè)包含界面的DLL,然后在VC++6.0中(其他地方、任何語(yǔ)言其實(shí)都可以)來(lái)調(diào)用這個(gè)DLL,不是那種在qt creator里面建一個(gè)dll工程,然后再在qt creator里建一個(gè)調(diào)用該dll的工程的情況。首先,在qt creator中是可以直接建立一個(gè)C+

69、+ DLL工程的,編譯以后也可以生成dll,但是這樣生成的dll拿VC去調(diào)是不會(huì)成功的。因?yàn)?QT 必須有調(diào)用 QApplication 的 exec 方法,這樣才能產(chǎn)生消息循環(huán), QT 的程序才可以運(yùn)行。所以說(shuō)如果我們使用了 QT 編寫(xiě)了 dll 程序,在普通的 windows 程序中是不能調(diào)用的。QT 提供了解決方法:那就是 QTWinmigrate,將QT窗口界面封裝成dll,在VC++6.0項(xiàng)目中的應(yīng)用,下載打開(kāi)QTWinm

70、igrate文件夾,里面有幾個(gè)目錄,buildlib,doc,examples,lib,src。在examples目錄下給出幾個(gè)應(yīng)用QTWinmigrate的例子,其中有一個(gè)就是qtdll用qt creator打開(kāi)其中的qtdll.pro工程文件,右鍵單擊目錄樹(shù)最上層的工程名qtdll,選擇“添加新有文件”,然后新建一個(gè)“QT設(shè)計(jì)師界面類(lèi)”,類(lèi)名什么的自己填上,點(diǎn)確定返回,可以看到后綴為.ui的界面文件及界面文件的.h文件和.cpp

71、文件已經(jīng)加入到qtdll工程里面了,界面你怎么畫(huà)都行,剩下的步驟就是修改工程中的main.cpp文件,將QT窗口界面封裝成dll,在VC++6.0項(xiàng)目中的應(yīng)用,首先在main.cpp文件里面把界面文件的頭文件include進(jìn)來(lái),然后將DLL發(fā)布接口函數(shù)的部分修改為如下所示:  extern "C" __declspec(dllexport) int main(int

72、 argc, char *argv[])  {    QApplication a(argc, argv);    ****** w;    w.show();    return 

溫馨提示

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

評(píng)論

0/150

提交評(píng)論