軟件系統(tǒng)分析與設計實訓教學全套課件教程07《策略為王的用戶界面實現分析_第1頁
已閱讀1頁,還剩78頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、了3個界面庫,即: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、后網站有變動,可以通過www.google.com搜索guilib和profuisdll找到。XPFace沒有找到下載地址,大家有興趣的話,自己找找。,三、StkUI所使用的外部框架介紹,2、ProfUISdll的使用 StkUI3.0版只使用了ProfUISdll的colorbutton和顏色選擇對話框,從資源文件中可以看出(右圖)也就是在顏色設置對話框(通過菜單“選項=〉顏色設定...”啟動該對話框)中使用。,Stk

5、UI所使用的外部框架介紹,那么,看一下ExtColorDlg.cpp的代碼,就知道在具體這個窗口的處理上,使用外部框架提供的類和方法,實現了哪些具體的功能。其中的方法,是直接針對這個窗口的哪些按鈕功能的。從某種意義上說,框架就是把一組窗口按鈕,打了一個包而已。,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);// 這是現在使用的代碼簡單查看一下:原先的TranslateMainFrameMessage()和現在的PreTranslateMessage()兩個方法的定義,前者的定義指向ProfUIS/include/ExtMenuControlBar.h,而后者的定義指向microsoft visual studio/vc98/mfc/include,也就是說,后者是標準的MFC調用了。3.0版用MFC取代了

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

9、從該類繼承。 CGuiToolBarWnd: ToolBar為該類的對象。 CGuiControlBar, 左側功能樹為CWorkspBar的對象,CWorkspBar從CGuiControlBar繼承,CWorkspBar在工程XPFace中實現。  CGuiComboBoxExt和CGuiEdit: 另外在很多對話框中使用,其功能完全等同于CComboBox和Cedit。&

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

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

12、g:啟動對話框 CTextToolBar:從CGuiToolBarWnd繼承,實現帶文字標簽的工具條 CWorkspBar:從CGuiControlBar繼承,實現左邊功能樹 CXFDialog:對話框基類,實現半透明效果 CKSFileDialog:文件對話框  其余類未使用。,StkUI所使用的外部框架介紹,1、StkUI的系統(tǒng)啟動窗口處理過程:在BOOL CStkUIApp::

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

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

15、被用為調用它所指向的函數時,我們就說這是回調函數。因為可以把調用者與被調用者分開。調用者不關心誰是被調用者,它需知道的,只是存在一個具有某種特定原型、某些限制條件(如返回值為int)的被調用函數。,,Startup窗口的實現過程:執(zhí)行回調函數:CALLBACK LoadProgram( HWND hWnd, int nMinProgress, int nMaxProgress )并調用startup窗口的處理函數startupDl

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

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

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

19、StkUI系統(tǒng)菜單上,為彈出這個窗口,添加一個選項。注意:以上代碼只是實例。,7、STKUI的菜單,1、系統(tǒ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標準代碼,在創(chuàng)建項目時生成。,7、STKUI的菜單,1、系統(tǒng)的主菜單,如下圖所示例,對應程序中的資源為IDR_MAINFRAME,系統(tǒng)主菜單的作用:代表系統(tǒng)功能模塊的第一層(最高層)點擊進入第二層、第三層……(進入各級子菜單)這種模式是MFC基于窗口應用的典型運行(功能)架構系統(tǒng)功能按層次、“樹型”結構安排“樹”的最后的“葉(節(jié)點)”就是具體“功能”注意:實現功能并非只有點擊“樹”的“葉”節(jié)點,這也是這種

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

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

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

26、-指標選擇左側功能樹為CWorkspBar的對象,CWorkspBar從CGuiControlBar繼承, CWorkspBar在工程XPFace中實現.,8、STKUI的窗口,,同樣:在實時數據窗口,也有參數、成本、火焰山、活躍4個子窗口與策略窗口不同的是,選擇4個窗口之一后,立即得到相應的展示結果,選擇火焰山,立即顯示該股當前的火焰山圖形,,最中間的,就可以稱為“行情”窗口行情窗口也有9個子窗口選擇,分別是8~16。對應的功能

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

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

29、ew        ----在線資訊,8、STKUI的窗口,,相關的程序實現如下:CMainFrame::OnCreate函數中,有如下的調用實現了上面控制條的初始化和顯示。 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)建??繖凇W⒁猓喝菀妆缓鲆暤囊稽c,控制條能夠沿框架窗口??咳Q于框架窗口沿邊框四周創(chuàng)建的4個統(tǒng)一的控制條,即??繖?。沒有控制條來??繒r,??繖谘貞贸绦蛑鞔翱诳s小到不可見,當控制條??吭谶吙驎r,??繖诰驼归_并包圍這些控制條。CFrameWnd的成員函數EnableDocking()沿框架窗口創(chuàng)建這4個??繖?。

32、但是,??抗δ懿皇亲詣拥乇籑FC啟動的,在CMainFrame::OnCreate()中,需要調用EnableDocking()才能進行工具欄的停靠操作。 // Enable Docking EnableDocking(CBRS_ALIGN_ANY);有關??康脑O置,見程序注釋,不再羅列。,8、StkUI的多視圖管理,,對于多視圖的管理,沒有通過CDocumentTemplate進行(見王育堅教材5.6.2多

33、視圖),而是通過CDocument的派生類CStaticDoc進行。因為CDocument本身的函數GetFirstViewPosition和GetNextView提供了對于多個View進行管理的能力。同時,在CView::OnCreate函數中,View會將自身添加到Document中。在CStaticDoc::ShowStaticView函數中,通過context.m_pCurrentDoc = this指定了Document

34、,這樣,就可以對于View進行相應的管理了。在App類中通過靜態(tài)函數創(chuàng)建CStaticDoc實例,然后通過ShowStaticView創(chuàng)建相應的View。下面的回調函數是實現了視圖的顯示功能. BOOL CALLBACK LoadProgram( HWND hWnd, int nMinProgress, int nMaxProgress ),8、StkUI的多視圖管理,,視圖顯示的回調函數實現: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(); //以下賦予顯示窗口的文檔對象等指針 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的多視圖管理,,視圖顯示的回調函數實現: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 );……,,如紅色方框標出的窗口,就是右圖的窗口:,9、在VC++6.

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

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

43、,兩個內容是一樣的,只是zip一般在Windows下比較流行,tar.gz是Linux上流行的壓縮格式。,md5sums-4.8.6是以上文件的校驗和,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安裝包已經帶有QtCreator,如果是裝Qt5.4.0就不需要下載。我們裝4.8.6的,這里要下載“Qt Creator 3.3.0 for Windows (71 MB)”,點擊下載即可。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是針對Android開發(fā)的調試器。②jom可以百度一下,http://qt-project.org/wiki/jom ,是nmake克隆版,支持多條獨立命令并行構建軟件,加快軟件構建速度。③online_installers是在線安裝器。④Pyside是用于支持Python語言編寫Qt程序的

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

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

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

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

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

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

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

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

54、n”,都用默認的項目設置,一直點擊下一步,然后點“完成”,看到代碼:,點擊左下角倒數第三個圖標,就是純三角形那個:程序就能正常編譯跑起來了。,四、 QT4安裝,,配置:添加3個環(huán)境變量,依次如下:1)QTDIR用戶變量(假設你的Qt安裝在d:\Qt\4.8.6目錄下),在系統(tǒng)變量或用戶變量中(均可),新建一個變量“QTDIR”,具體內容是d:\Qt\4.8.6。也可以不用,因為下面設置路徑時,就直接使用直接地址,而不是依賴QTDIR的

55、相對地址。2)添加QMAKESPEC變量,變量值為d:\Qt\4.8.6\mkspecs\win32-msvc****,****為2003/2005/2008/2010/2012/2013,顯然,這一串數字就是VS的版本,VC++6.0是20033)在用戶變量中,為變量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)境變量就已經配置好。如果它的環(huán)境變量丟失,可以到VC的安裝目錄的Bin目錄中,執(zhí)行VCVARS32.BAT批處理文件即可恢復。5)不重新啟動系統(tǒng)讓系統(tǒng)變量立即有效的方法:在DOS命令行窗口,輸入:set path=c:,關閉窗口,再打開看看?,四、創(chuàng)建項目,

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

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

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

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

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

62、加一個新類1、新建myclass.h #include class AClass : public Qobject //為了定義類的信號和曹,必須繼承QT的Qobject{Q_OBJECTpublic slots: //定義處理A信號的曹void theSlot();signals:void theSignal(); //定義A信號};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” ); //主窗口有一個按鈕PressMeAClass *a

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論