【转】QT介绍
一、Qt介紹
Qt,坦白來說,并不只是一個界面庫,他是C++編程思想的集大成者。它是一個經過完善的C++應用程序框架。使用Qt,在一定程度上你獲得的是一個“一站式”、“全方位”的解決方案,STL、string、XML、數據庫、網絡這些零散的功能都包含在Qt中,并且得到了封裝,一共開發者使用。
跨平臺GUI通常有三種實現策略,分別是:
API 映射:API 映射是說,界面庫使用同一套 API,將其映射到不同的底層平臺上面。大體相當于將不同平臺的 API 提取公共部分。比如說,將 Windows 平臺上的按鈕控件和 Mac OS 上的按鈕組件都取名為 Button。當你使用 Button 時,如果在 Windows 平臺上,則編譯成按鈕控件;如果在 Mac OS 上,則編譯成按鈕組件。這么做的好處是,所有組件都是原始平臺自有的,外觀和原生平臺一致;缺點是,編寫庫代碼的時候需要大量工作用于適配不同平臺,并且,只能提取相同部分的 API。比如 Mac OS 的文本框自帶拼寫檢測,但是 Windows 上面沒有,則不能提供該功能。這種策略的典型代表是 wxWidgets。這也是一個標準的 C++ 庫,和 Qt 一樣龐大。它的語法看上去和 MFC 類似,有大量的宏。據說,一個 MFC 程序員可以很容易的轉換到 wxWidgets 上面來。
API 模擬:前面提到,API 映射會“缺失”不同平臺的特定功能,而 API 模擬則是解決這一問題。不同平臺的有差異 API,將使用工具庫自己的代碼用于模擬出來。按照前面的例子,Mac OS 上的文本框有拼寫檢測,但是 Windows 的沒有。那么,工具庫自己提供一個拼寫檢測算法,讓 Windows 的文本框也有相同的功能。API 模擬的典型代表是 wine ——一個 Linux 上面的 Windows 模擬器。它將大部分 Win32 API 在 Linux 上面模擬了出來,讓 Linux 可以通過 wine 運行 Windows 程序。由此可以看出,API 模擬最大優點是,應用程序無需重新編譯,即可運行到特定平臺上。另外一個例子是微軟提供的 DirectX,這個開發庫將屏蔽掉不同顯卡硬件所提供的具體功能。使用這個庫,你無需擔心硬件之間的差異,如果有的顯卡沒有提供該種功能,SDK 會使用軟件的方式加以實現。
GUI 模擬:每個系統平臺都提供了圖形繪制函數,例如畫點、畫線、畫面等。有些工具庫利用這些基本函數,繪制出自己的組件,這就是 GUI 模擬。GUI 模擬的工作量無疑是很大的,因為需要使用最基本的繪圖函數將所有組件畫出來;并且這種繪制很難保證和原生組件一模一樣。但是,這一代價帶來的優勢是,可以很方便的修改組件的外觀——只要修改組件繪制函數即可。很多跨平臺的 GUI 庫都是使用的這種策略,例如 gtk+(這是一個 C 語言的圖形界面庫。使用 C 語言很優雅地實現了面向對象程序設計。不過,這也同樣帶來了一個問題——使用大量的類型轉換的宏來模擬多態,并且它的函數名一般都比較長,使用下劃線分割單詞,看上去和 Linux 如出一轍。gtk+ 并不是模擬的原生界面,而是有它自己的風格,所以有時候就會和操作系統的界面格格不入。)、Swing 以及我們的 Qt。
Qt 和 wxWidgets 一樣,也是一個標準的 C++ 庫。但是它的語法類似于 Java 的 Swing,十分清晰,而且使用信號槽(signal/slot)機制,讓程序看起來很清晰——這也是很多人優先選擇 Qt 的一個很重要的原因。不過,所謂“成也蕭何,敗也蕭何”。這種機制雖然很清楚,但是它所帶來的后果是你需要使用 Qt 的 moc 對程序進行預處理,才能夠再使用標準的 make 或者 nmake 進行正常的編譯,并且信號槽的調用要比普通的函數調用慢大約一個數量級(Qt 4 文檔中說明該數據,但 Qt 5 尚未有官方說明)。Qt 的界面也不是原生風格的,盡管 Qt 使用 style 機制十分巧妙地模擬了原生界面。另外值得一提的是,Qt 不僅僅能夠運行在桌面環境中,還可以運行在嵌入式平臺以及手機平臺。
?
二、Qt安裝與配置
Qt的安裝
上面是三種Qt,第一種是使用Qt?Creator+mingw編譯和調試開發的Qt,第二種是使用Qt?Creator+msvc調試和編譯的Qt,第三種是使用vs+Qt插件。開始學習的建議安裝第一種,自帶gcc編譯器和gdb調試器。安裝過程就不說了,一直下一步,安裝完之后的狀態如下圖。
2.2Qt的項目創建
1、文件->新建文件或項目,彈出一個對話框,我們選擇Application項目中的Qt Widgets Application,如下圖所示:
2、輸入項目名稱:helloworld,然后點擊“瀏覽”按鈕來選擇源碼存放路徑,比如我這里是E:\codeTest\qtCreator_2,如果選中了“設為默認的項目路徑”,那么今后創建的項目都將存放在這里。單擊“下一步”,如下圖所示:
注意:項目所在路徑中不能有中文,否則程序運行報錯,例如:C:\你好\qtCreator_2。
3、選擇構建套件:DeskTop Qt 5.6.7.1 MinGw 32bit,點擊詳情按鈕可以看到 ?默認為Debug版本和Release版本分別設置了不同的目錄,Debug即為調試版本,Release為可發布版本。都保持默認即可,單擊“下一步”,如下圖所示:
4、自定義類名:設定類名為 HelloDialog,基類選擇 QDialog ,單擊”下一步“。這表明該類繼承自 QDialog類,使用這個類可以生成一個對話框界面,Qt框架中所有的類都是以‘Q’開頭的,如下圖所示:
5、設置項目管理:在這里可以看到這個項目的匯總信息,還可以使用版本控制系統,這里不會涉及,直接單擊”完成“即可,如下圖所示:
6、右擊項目文件列表中的任一文件,點擊”在Explorer中打開“,就可以轉到項目文件夾,讓我們來看看項目目錄中的各個文件說明,如下圖所示:
7、以上就是Qt Creator創建新項目的方法和步驟。
?2.3 Qt的配置
這里說一下mingw版本的配置,此外msvc版本的Qt的編譯器和調試器都是msvc
三、常見概念
3.1 信號和槽機制(Signal & Slot)
Qt提供了信號和槽機制用于完成界面操作的響應,是完成任意兩個Qt對象之間的通信機制。其中,信號會在某個特定的情況或動作下被觸發,槽是等同于接收并處理信號的函數。
每個Qt對象都包含若干個預定義的信號和若干個預定義的槽,當某一個特定的事件發生時,一個信號被發送,與信號相關的槽則會響應信號并完成相應的處理。當一個類被繼承時,該類的信號和槽也同時被繼承,也可以根據需要自定義信號和槽。
1. 信號與槽的連接方式
1)一個信號可以與另一個信號相連
connect(Object1,SIGNAL(signal1),Object2,SLOT(signal2));
表示Object1的信號1可以觸發Object2的信號2的發送。
2)一個信號可以與多個槽相連
connect(Object1,SIGNAL(signal1),Object2,SLOT(slot2));
connect(Object1,SIGNAL(signal1),Object3,SLOT(slot3));
3)一個槽可以響應多個信號
connect(Object1,SIGNAL(signal1),Object2,SLOT(slot2));
connect(Object3,SIGNAL(signal3),Object2,SLOT(slot2));
常用的連接方式為
connect(Object1,SIGNAL(signal),Object2,SLOT(slot));
其中,signal為Object1的信號,slot為Object2的槽
SIGNAL()和SLOT()是Qt定義的兩個宏,它們返回其參數的C語言風格的字符串(const char*)。如下所示,兩者等同。
connect(Object1,SIGNAL(signal),Object2,SLOT(slot));
connect(Object1,“signal”,Object2,“slot”);
2.信號與槽機制的優點
1)類型安全。需要關聯的信號和槽的簽名必須是等同的,即信號的參數類型和參數個數與接收該信號的槽的參數類型和參數個數相同。
但是槽的參數個數可以少于信號的參數個數,但缺少的參數必須是信號參數的最后一個或幾個參數。如信號和槽的參數簽名不符,編譯器就會報錯。
2)松散耦合。信號與槽機制減弱了Qt對象的耦合度。
激發信號的Qt對象無須知道是哪個對象的槽接收它發出的信號,它只需在適當的時候發送適當的信號即可,它不需要關心它發出的信號有沒有被接收到,以及哪個對象的哪個槽接收到該信號。
對象的槽也不需要知道哪些信號關聯了自己,而一旦關聯信號和槽,Qt就保證了適合的槽得到了調用。即使關聯的對象在運行時被刪除程序也不會崩潰。
注意:一個類若要支持信號和槽,就必須從QObject或QObject的子類繼承。Qt的信號和槽機制不支持對模板的使用。
3)信號與槽機制的效率
信號與槽機制增強了對象間通信的靈活性,然而損失發一些性能。同回調函數相比,信號和槽機制運行速度有些慢。通常,傳遞一個信號來調用槽函數將會比直接調用非虛函數運行速度慢10倍。原因如下:
a. 需要定位接收信號的對象。
b. 安全地遍歷所有的關聯(如一個信號關聯多個槽的情況)。
c. 編組(marshal)/解組(unmarshal)傳遞的參數。
d. 多線程的時候,信號可能需要排隊等待。
然而,與創建對象的new操作和刪除對象的delete操作相比,信號和槽的運行代價只是它們很少的一部分。信號和槽機制導致的這點性能損耗,對實時應用程序是可以忽略的;同信號和槽提供的靈活性和簡便性相比,這點性能損耗是值得的。
3.2 Qt5元對象系統
Qt 元對象系統提供了對象間的通信機制(信號和槽)、運行時類型信息和動態屬性系統的支持,是標準C++的一個,它使Qt能夠更好地實現GUI圖形用戶界面編程。
Qt的元對象系統不支持C++模板,盡管模板擴展了標準C++的功能,但是元對象系統提供了模板無法提供的一些特性。
Qt元對象系統基于以下三個事實。
1)基類QObject:?任何需要使用元對象系統功能的類必須繼承自QObject。
2)Q_OBJECT宏:Q_OBJECT宏必須出現在類的私有聲明區,用于啟動元對象的特性。
3)元對象編譯器 (Meta-Object Complier, moc):?為QObject子類實現元對象特性提供必要的代碼實現。
3.3 布局管理器
在設計較復雜的GUI用戶界面時,僅通過指定窗口部件的父子關系以期達到加載和排列窗口部件的方法是行不通的,最好的辦法是使用Qt提供的布局管理器。
????QGridLayout *mainLayout =?new?QGridLayout(this);?//(a)
????mainLayout->addWidget(label1,0,0); ????????????//(b)
????mainLayout->addWidget(lineEdit,0,1);
????mainLayout->addWidget(label2,1,0);
????mainLayout->addWidget(button,1,1); ???
????setLayout(mainLayout); ????//(c)
其中:
(a) QGridLayout *mainLayout = new QGridLayout(this) : 創建一個網格布局管理器對象 mainLayout, 并且 this 指出父窗口。
(b) mainLayout->addWidget(...) : 分別將控件label1等放置在該布局管理器中,還可以在創建布局管理器對象時不必指明父窗口。
(c) QWidget::setLayout(...) :?將布局管理器添加到對應的窗口部件對象中。因為這里的主窗口就是父窗口,所以直接調用 setLayout(mainLayout)即可。
?
?
發布Qt應用
發布Qt 編寫的軟件需要以"release" 配置編譯源代碼,Qt Creator左下角的運行工具欄中可以更改配置,Vs在[project/項目]->[屬性/properties]中進行配置。
將編譯得到的二進制可執行文件與必要的支持庫打包。
支持庫由.pro文件中設置的模塊決定,一般包含core和gui模塊的Qt應用需要以下支持庫文件:
- Qt庫文件[Qt\lib]
- Qt5Core.dll
- Qt5Gui.dll
- Qt5Widgets.dll
- Qt Platform插件[Qt\plugins\platforms]
復制文件夾并刪除其中的.pdb文件,只保留.dll文件。
qwindows.dll】同名.dll文件中刪除帶有d后綴(debug模式所需)的.dll文件,如刪除"qwindowsd.dll",保留"qwindows.dll"。
Desktop平臺下所需的文件:
-?qoffscreen.dll
?
-?qminimal.dll
- ICU庫[Qt\bin]
ICU庫用于提供對Unicode字符編碼的支持
- ?icudt53.dll
?
-?icuin53.dll
?
-?icuuc53.dll
- C++ Runtime Library
- msvcp120.dll
- msvcr120.dll
- OpenGl支持庫
- libEGL.dll
- Windows平臺相關
- gpsvc.dll
- kernel32.dll
?
Qt5如何添加信號和槽
轉載:https://blog.csdn.net/xzq413520903/article/details/79280705
信號和槽的創建方式有兩種,這里暫且稱他們為靜態創建和動態創建。
?何為靜態創建和動態創建呢?這里我們以按鈕pushButton為例。假設我們已經創建好了Dialog窗口,
?然后我們在窗口上面放置按鈕,如下圖所示。此時我們可以看到在文件ui_dialog.h中會自動添加如下
按鍵創建的代碼。
此時,我們只要在轉到設計的ui界面上,將鼠標放置于pushButton上面,點擊右鍵,選項“轉到槽...”,
此時會出現如下窗口,若是選擇按鈕單擊有效則選擇click(),然后點擊OK。此時將會自動生成如下函數并
跳轉至該函數
?void Dialog::on_MyButton_clicked()
{
//添加你所想要的操作
}
若是想要動態創建按鈕,則不用先在窗口上面放置按鈕控件,而是直接在代碼中添加創建。如下所示,
我們現在Dialog.h文件中定義一個按鈕指針以及一個槽,然后在Dialog.cpp初始化構造函數中添加按鈕的
?創建、位置的設置以及槽和信號的設置。
最后再自己在Dialog.cpp文件中實現槽函數void on_MyButton_clicked()。
?
四、windows開Qt開發
方案一:Qt Creator
Qt Creator+MinGW 或者 Qt Creator+VC++ Compiler
方案二:QT4.8.5 for Windows(VS2010+VS插件)
1、必須確保電腦已安裝VS2010。
2、安裝Qt for vs2010的庫文件,請運行qt-win-opensource-4.8.5-vs2010.exe。
QT默認的安裝路徑是C:\Qt\4.8.5,這里建議修改為C:\Qt\4.8.5_VS2010,此舉是為了與其他QT版本庫區分開。避免把已安裝的其他QT版本覆蓋并破壞掉。(注:支持windows環境的QT庫有mingw,vs2010,vs2008等版本)
Windows7 QT5.11.2+VS 2015環境搭建
https://blog.csdn.net/HW140701/article/details/82917808
五、Linux Qt5 開發環境搭建
https://blog.csdn.net/u013934107/article/details/80712418
- 實例
有兩種創建圖形化程序界面的方法,一、通過系統自動生成的.ui文件,二、通過代碼實現。
方法一可通過鼠標拖拉布局界面,較方便,但在設計較復雜的界面時最好還是使用Qt提供的布局管理器。
QT項目框架分析
6.1?每一個工程都有一個執行的入口函數,此項目中的main.cpp中的 main()函數就是此工程的入口。
main.cpp
?
#include?"dialog.h"
#include <QApplication>
?
int?main(int?argc,?char?*argv[])
{
????QApplication a(argc, argv);
????Dialog w;
????w.show();
?
????return?a.exec();
}
?
如上所示,其中:
1)?#include "dialog.h" 包含了程序中要完成功能的Dialog類的定義,在Dialog類中封裝完成所需要的功能。
注意:程序中使用哪個類,就要引用包含該類定義的頭文件。如 dialog.h中使用QLabel、QLineEdit、QPushButton必須包含頭文件
#include <QLabel> #include <QLineEdit> #include <QPushButton>
2)?#include <QApplication>:Application類的定義。
?3) ?int main(int argc, char *argv[]): 應用程序的入口,幾乎在所有使用Qt的情況下,main()函數只需要在將控制權交給Qt庫之前執行初始化,然后Qt 庫通過事件向程序告知用戶的行為。所有的Qt程序中都 必須有且只有一個main()函數。
?4)?QApplication a(argc, argv): a 是這個程序的 QApplication對象。
在每一個使用Qt圖形化應用程序中都必須使用一個QApplication 對象。QApplication管理了各種和樣的圖形化應用程序的廣泛資源、基本設置、控制流及事件處理等。
在任何的窗口部件被使用之前必須創建QApplication 對象。它在這里被創建并且處理這些命令行變量。所有被Qt識別的命令行參數都將從argv中被移去(并且 argc 也因此而減少)。
5) w.show():當創建一個窗口部件的時候,默認它是不可見的,必須調用show()函數使它變為可見。、
6) return a.exec():程序進入消息循環,等待可能的輸入進行響應。這里就是main()函數將控制權交給Qt, Qt完成事件處理工作,當應用程序退出的時候,exec()函數的值就會返回。在exec()函數中,Qt接收并處理用戶和系統的事件并且將它們傳遞給適當的窗口部件。
6.2 ?dialog.h 頭文件
在類Dialog中的定義中,Q_OBJECT宏的作用是啟動Qt元對象系統的一些特性(如支持信號和槽等),它必須放到類定義的私有區。
private slots: 表示下面的函數為槽函數。
dialog.h
?
#ifndef DIALOG_H
#define?DIALOG_H
?
#include <QDialog>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QGridLayout>
?
const?static?double?PI =?3.1416;
class?Dialog :?public?QDialog
{
????Q_OBJECT
?
public:
????Dialog(QWidget *parent =?0);
????~Dialog();
?
private:
????QLabel *label1, *label2;
????QLineEdit *lineEdit;
????QPushButton *button;
private?slots:
????void?showArea();
};
?
#endif?// DIALOG_H
?
6.3 dialog.cpp
在該文件中初始化部件,創建布局管理器,將部件加到布局管理器中,并且連接
?
#include?"dialog.h"
?
Dialog::Dialog(QWidget *parent)
????: QDialog(parent)
{
//初始化部件
????label1 =?new?QLabel(this);
????label1->setText(tr("請輸入圓的半徑:"));
????lineEdit =?new?QLineEdit(this);
????label2 =?new?QLabel(this);
????button =?new?QPushButton(this);
????button->setText(tr("顯示對應的圓的面積"));
//創建布局管理器,將部件加到布局管理器中
????QGridLayout *mainLayout =?new?QGridLayout(this);
????mainLayout->addWidget(label1,0,0);
????mainLayout->addWidget(lineEdit,0,1);
????mainLayout->addWidget(label2,1,0);
????mainLayout->addWidget(button,1,1);
// 連接信號與槽
//分別是 點擊和文本內容改變信號
????connect(button,SIGNAL(clicked()),this,SLOT(showArea()));
????connect(lineEdit,SIGNAL(textChanged(QString)),this,SLOT(showArea()));
}
?
Dialog::~Dialog()
{
????delete?label1,label2,lineEdit,button;
}
//定義槽函數
void?Dialog::showArea()
{
????bool?ok;
????QString tempStr;
????QString valueStr = lineEdit->text();
????int?valueInt = valueStr.toInt(&ok);
????double?area = valueInt * valueInt * PI;
????label2->setText(tempStr.setNum(area));
}
?
?6.4?上面三部分為這個工程代碼的分析,介紹了主程序中完成圖形化界面程序所需的編寫的代碼,即窗口部件的初始化,以及窗口的使用。dialog.h dialog.cpp主要告訴如何自定義一個對話框Dialog類(繼承自QDialog)即定義窗口部件,以及如何將窗口部件的信號與處理事件的槽函數進行綁定。
通過上面的分析我們可以創建一個簡單的計算圓面積的圖形應用程序。
?
七、QT調用MFC DLL
方式一:隱式調用
int nSum = TestAddFunction(1, 2);
qDebug() << nSum;
測試成功!
注意:需要.dll文件、.lib文件、.h文件,
在.pro文件中添加lib庫路徑和文件
LIBS+= -L../***/***/***/lib -l***
-L后面跟的是lib庫路徑
-l后面跟的是lib文件名,不要后綴.lib
因為庫函數是以C來編譯和鏈接的,所以在包含頭文件的時候注意要加extern "C",以C語言來編譯和鏈接。
extern "C"
{
#include "InterfaceFunction.h"
}
所有用到的dll放在exe同目錄下。
?
方式二:顯示調用
QLibrary lib("DUHardware_D.dll");
if (lib.load()) {
? ? qDebug() << "load ok!";
} else {
? ? qDebug() << "load failed!";
}
typedef int (*TestAddFunction)(int, int);
TestAddFunction fpAdd = (TestAddFunction)lib.resolve("TestAddFunction");
int nSum = fpAdd(1, 2);
qDebug() << nSum;
測試成功!
注意:只需要dll文件,如果dll用到了其他dll,所有dll都需要放在exe同目錄下,不然lib.load()失敗。
?
八、Qt中使用MFC
https://blog.csdn.net/sichuanpb/article/details/69375626
開發環境:
win8 +?vs2008?+?qt-windows-opensource-4.8.0
A:需求:在QT中添加MFC的應用;
過程:
1:用vs創建QT的ui工程;
2:引入MFC頭文件,這個可以直接在MFC工程中的stdafx.h中直接復制;
3:修改一些工程配置;
?
應用示例:
?
方法2:上述方法雖然可行,但是設置麻煩,這里有個更好的設置方法;
通過visualstudio創建Qt程序后,添加添加相關都文件,和上面一致;
然后直接在工程屬性中設置“在共享DLL中應用MFC”;
這樣就可以在在Qt工程中用MFC了;
?
B:QT中添加windows函數庫;
如果不想用MFC庫,覺得添加方法有點麻煩,可以直接用windwos sdk編程,這個添加比較簡單:
(1): 添加?#include <Windows.h>,這樣就可以在Qt中用windows sdk了;
(2):在Qt中獲取窗口句柄:
? ? ? ? ? ? ? Qt的Widget類提供了一個很方便的接口winId(),這個接口在windows系統上獲取窗口句柄;
? ? ? ? ? ? ?如 ?在窗口上繪制一條直線:
? ? ? ??void slot3()
{
HWND hwnd = HWND(winId());
HDC hDC = ::GetDC(hwnd);
POINT pt;
MoveToEx(hDC, 0,0, &pt);
LineTo(hDC,1000,100);
::ReleaseDC(hwnd, hDC );
}
八、MFC調用Qt中的類
https://blog.csdn.net/lmhuanying1012/article/details/76168295
包含相關目錄
?
在MFC工程的屬性頁中添加包含目錄(include)及庫目錄(lib)
?
這里的包含目錄是:E:\Qt\5.9.1\msvc2015\include
?
? ? ? ? ? ? ? 庫目錄是:E:\Qt\5.9.1\msvc2015\lib
?
?
?
配置Qt環境
?
引用頭文件
?
#include <QtWidgets\QApplication>
其中QtCore是包含目錄(include)下面的目錄。
?
?
?
添加全局代碼或靜態局部代碼:
?
int iArgc = 0;
static QApplication qtApp(iArgc, NULL);
?
?
引用相關類頭文件
?
在工程中,引用要使用類的相關頭文件
?
#include <QtCore\QString>
其中QtCore是包含目錄(include)下面的目錄。
MFC 下調用Qt編寫的含界面的dll
https://blog.csdn.net/libin88211/article/details/38183791
在VC下調用Qt編譯的帶界面的DLL。
?
首先強調一下環境:
?
操作系統: ? ? ? ? ? ? ? ? ? ? win8
?
VS ? 版本: ? ? ? ? ? ? ? ? ? ? VS2010
?
Qt ? ?版本: ? ? ? ? ? ? ? ? ? ??qt-opensource-windows-x86-mingw482_opengl-5.3.0.exe
?
qtwinmingrate版本: ??qt-solutions-ov3r1oads-qt-solutions 此版本較為新,2.8 在Qt5下用不了。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?下載地址:https://qt.gitorious.org/qt-solutions/ov3r1oads-qt-solutions/source/80592b0e7145fb876ea0e84a6e3dadfd5f7481b6:
?
參考:1,http://blog.csdn.net/normallife/article/details/5397980
?
? ? ? ? ? ? 2,?http://www.rebaoxian.com/28649.html
?
? ? ? ? ? ? 3,http://qimo601.iteye.com/blog/1675575
?
相關鏈接
官網:https://www.qt.io/
官方下載鏈接:http://download.qt.io/
Qt下載鏈接:http://download.qt.io/archive/qt/
Qt Creator下載鏈接:http://download.qt.io/archive/qtcreator/
Qt VS開發插件下載鏈接:http://download.qt.io/archive/vsaddin/
Qt官方文檔鏈接:http://doc.qt.io/
Qt?API在線參考文檔:http://www.kuqin.com/qtdocument/index.html
Qt中調用MFC對話框實例:https://download.csdn.net/download/byxdaz/11052330
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: arcgis字段计算器利用python按
- 下一篇: s3c2440移植MQTT