VS2012下進行QT creator登入對話方塊設計
最近看《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:
#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中新增之前的槽函式的宣告。
#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中定義槽函式,實現正確輸入帳號密碼則進入主視窗,否則報錯。
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完整程式碼:
#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);
}
}
點選編譯就能實現功能