1. 程式人生 > >VS2012下進行QT creator登入對話方塊設計

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);
    }
}

點選編譯就能實現功能