最近看《Qt教程及軟件》學習QT,這本書的編程是在Qt creator上進行的,本人更傾向于在VS2012上進行開發,故根據自己實驗中的經驗,筆記一下在VS2012進行Qt編程的一些問題及解決方法,本人用的是Qt5.3版本。
首先,新建一個工程
選擇Qt Application,填寫工程名
一直Next,Base class選擇QWidget,點擊Finish創建
此時項目未添加對應的include文件,有許多地方顯示“can not open source file……”。選擇菜單欄PROJECT->User Properties… 進入添加頭文件設置頁面
點擊“Additional Include Directories”進行編輯,添加你QT安裝目錄下的以下文件夾
新建一個對話類,右鍵項目名,添加新類
選擇Qt5 Classes,雙擊 Qt5GuiClasses
Base Class填QDialog,點擊Finish完成創建
然后就進行ui布置了,在logindlg.ui中設計下面的界面:行輸入框為Line Edit。其中用戶名后面的輸入框在屬性中設置其object Name為usrLineEdit,密碼后面的輸入框為pwdLineEdit,登錄按鈕為loginBtn,退出按鈕為exitBtn。設置完如下圖:
點擊選擇”編輯信號/槽“,按住退出按鈕拖一下
,彈出對話框,信號選擇clicked(),槽選擇close(),實現點擊退出功能。若沒有close(),選擇“顯示從QWidget繼承的信號和槽”。
按照上面方法設置登錄按鈕的信號與槽,其槽函數要自己寫,所以槽選擇那里點擊編輯,新增一個slot1(),改名為on_loginBtn_clicked()。點擊確定。保存Qt 設計師并關閉。
回到VS2012,修改main.cpp:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#include "user.h" #include <QtWidgets/QApplication> #include "logindlg.h" int main( int argc, char *argv[]) { QApplication a(argc, argv); User w; loginDlg login; if (login.exec() == QDialog::Accepted) { w.show(); return a.exec(); } else return 0; } |
接著修改loginDlg.cpp,先在loginDLg.h中添加之前的槽函數的聲明。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#ifndef LOGINDLG_H #define LOGINDLG_H #include <QDialog> #include "ui_logindlg.h" class loginDlg : public QDialog { Q_OBJECT public : loginDlg(QWidget *parent = 0); ~loginDlg(); private : Ui::loginDlg *ui; //這里定義ui為指向類的指針 private slots: void on_loginBtn_clicked(); //槽函數聲明 }; #endif // LOGINDLG_H |
最后在loginDlg.cpp中定義槽函數,實現正確輸入帳號密碼則進入主窗口,否則報錯。
1
2
3
4
5
6
7
8
|
void loginDlg::on_loginBtn_clicked() { if (ui->usrLineEdit->text() == tr( "caddress" )&&ui->pwdLineEdit->text()==tr( "123456" )) accept(); else { QMessageBox::warning( this ,tr( "Warning" ),tr( "user name or password error!" ),QMessageBox::Yes): } } |
至此,程序還有許多錯誤,有大部分頭文件未找到,按照上面的方法繼續添加相應文件夾:
添加完后點擊編譯,則相應的頭文件就找到了。
loginDlg.cpp完整代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include "logindlg.h" #include <qmessagebox> //添加該頭文件才能使用QMessageBox loginDlg::loginDlg(QWidget *parent) : QDialog(parent) { (*ui).setupUi( this ); //這里ui需要為類類型,所以得解指針 } loginDlg::~loginDlg() { } void loginDlg::on_loginBtn_clicked() { if (ui->usrLineEdit->text() == tr( "caddress" )&&ui->pwdLineEdit->text()==tr( "123456" )) //這里需要指針,直接使用ui accept(); else { QMessageBox::warning( this ,tr( "Warning" ),tr( "user name or password error!" ),QMessageBox::Yes); } } |
點擊編譯就能實現功能
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/C_address/article/details/50560260