当前位置:编程学习 > wap >>

求教:QT编程中登录界面的设计

我在设计的程序中,要实现一个登录界面:
登录界面(基于QDialog类)------>>登录成功后,显示主窗口(基于QMianwindow)。同时呢,在dialog中查询到的用户信息要传递给mainwindow类,有点像QQ的登录界面。我不知到如何实现。
dialogwindow dialog;
mainwindow mainwin
if(dialog.exec())
{
  mainwin.show;
}

这样做不知道行不行,又不知道如何传递参数。 --------------------编程问答-------------------- 你自己试一下就知道了,不复杂。
传值的话在Dialog的建二个成员变量
m_user,m_pass
MainWindow也同样二个public成员
直接MainWindow.m_user = Dialog.m_user即可。 --------------------编程问答-------------------- 实现过程:
1.先新建Qt4 Gui Application工程,工程名为mainWidget,选用QWidget作为Base class,这样便建立了主窗口。文件列表如下:
 
2.然后新建一个Qt Designer Form Class类,类名为loginDlg,选用Dialog without Buttons,将其加入上面的工程中。文件列表如下:
 
3.在logindlg.ui中设计下面的界面:行输入框为Line Edit。其中用户名后面的输入框在属性中设置其object Name为usrLineEdit,密码后面的输入框为pwdLineEdit,登录按钮为loginBtn,退出按钮为exitBtn。
 
4.将exitBtn的单击后效果设为退出程序,关联如下:
 
5.右击登录按钮选择go to slot,再选择clicked(),然后进入其单击事件的槽函数,写入一句
    void loginDlg::on_loginBtn_clicked()
{
    accept();
}
6.改写main.cpp:
#include <QtGui/QApplication>
#include "widget.h"
#include "logindlg.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    loginDlg login;
    if(login.exec()==QDialog::Accepted)
    {
        w.show();
        return a.exec();
    }
    else return 0;
}
7.这时执行程序,可实现按下登录按钮进入主窗口,按下退出按钮退出程序。
8.添加用户名密码判断功能。将登陆按钮的槽函数改为:
void loginDlg::on_loginBtn_clicked()
{
if(m_ui->usrLineEdit->text()==tr("qt")&&m_ui->pwdLineEdit->text()==tr("123456"))
//判断用户名和密码是否正确
accept();
else{
QMessageBox::warning(this,tr("Warning"),tr("user name or password error!"),QMessageBox::Yes);
//如果不正确,弹出警告对话框
}
}
并在logindlg.cpp中加入#include <QtGui>的头文件。如果不加这个头文件,QMessageBox类不可用。
(说明:由于版本原因,现在的程序默认生成的ui类对象可能是ui,而不是m_ui,请到loginDlg.h中查看。)

9.这时再执行程序,输入用户名为qt,密码为123456,按登录按钮便能进入主窗口了,如果输入错了,就会弹出警告对话框。
 

如果输入错误,便会弹出警告提示框:

 

10.在logindlg.cpp的loginDlg类构造函数里,添上初始化语句,使密码显示为小黑点。
loginDlg::loginDlg(QWidget *parent) :
QDialog(parent),
m_ui(new Ui::loginDlg)
{
m_ui->setupUi(this);
m_ui->pwdLineEdit->setEchoMode(QLineEdit::Password);
}

效果如下:
 

11.如果输入如下图中的用户名,在用户名前不小心加上了一些空格,结果程序按错误的用户名对待了。

 

我们可以更改if判断语句,使这样的输入也算正确。
void loginDlg::on_loginBtn_clicked()
{
if(m_ui->usrLineEdit->text().trimmed()==tr("qt")&&m_ui->pwdLineEdit->text()==tr("123456"))
accept();
else{
QMessageBox::warning(this,tr("Warning"),tr("user name or password error!"),QMessageBox::Yes);
}
}
加入的这个函数的作用就是移除字符串开头和结尾的空白字符。

12.最后,如果输入错误了,重新回到登录对话框时,我们希望可以使用户名和密码框清空并且光标自动跳转到用户名输入框,最终的登录按钮的单击事件的槽函数如下:
void loginDlg::on_loginBtn_clicked()
{
if(m_ui->usrLineEdit->text().trimmed()==tr("qt")&&m_ui->pwdLineEdit->text()==tr("123456"))
//判断用户名和密码是否正确
accept();
else{
QMessageBox::warning(this,tr("Warning"),tr("user name or password error!"),QMessageBox::Yes);
//如果不正确,弹出警告对话框
m_ui->usrLineEdit->clear();//清空用户名输入框
m_ui->pwdLineEdit->clear();//清空密码输入框
m_ui->usrLineEdit->setFocus();//将光标转到用户名输入框
}
}

最终的loginDlg.cpp文件如下图:
 
--------------------编程问答-------------------- 楼上的非常详细 --------------------编程问答-------------------- 比如QT中 自动生成的Main Window 点击一下菜单项File 然后下面就弹出NEW Open save saveas 等子项 不要代码的
要直接在qtdesigner中直接生成 找了半天 都找不到 怎么添加
引用 2 楼  的回复:
实现过程:
1.先新建Qt4 Gui Application工程,工程名为mainWidget,选用QWidget作为Base class,这样便建立了主窗口。文件列表如下:
 
2.然后新建一个Qt Designer Form Class类,类名为loginDlg,选用Dialog without Buttons,将其加入上面的工程中。文件列表如下:
 
3.在logindlg.ui……
--------------------编程问答-------------------- --------------------编程问答--------------------

  这很简单啊, 在dialog 中,当密码和用户名匹配成功后,new 一个mainwindow出来,把参数从构造函数当中传过去就行了啊 。。。 --------------------编程问答-------------------- http://download.csdn.net/detail/aaa20090987/3198961
这个是别人写的类似于QQ的聊天软件,你可以看下做个参考。。。
补充:移动开发 ,  Qt
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,