Qt登陆窗口,将登陆用户的信息显示到主界面中

来源:互联网 发布:学汉语拼音的软件 编辑:程序博客网 时间:2024/05/21 21:50

该种方法是利用public成员来实现不同ui间的信息传递,可以将登陆用户的信息保存下来传递给其他界面。解决了我上一篇用信号和槽的方法不能解决的问题。


这里是利用公共函数的QString的GetName()和GetPwd()来获取用户名和密码将其传递,是可行的



我试验了下将登录的QString的名称和的QString pwd两个私有变量改为public共用变量便可直接肤质并不需要用到上述两个函数。


在主体中直接名称= l.name;

PWD = l.pwd;

l.name指明是登录这个类里的变量






源地址:HTTP://blog.csdn.net/chenzhoutong/article/details/6436653

数据库:sqlite3的

数据库名:学生

表名:学生

表的结构:


使用的工具是:SQLite数据库浏览器

 

注意:记得把创建的数据库文件student放到对应的目录(QT4.7是在login-build-desktop下)

 

新建工程登录

跳到UI界面,放置的QLabel和QViewTable两个组件

 


新建类的LoginDialog,继承自被QDialog


logindialog.h:

[CPP]  鉴于普通副本
  1. #包括<被QDialog>  
  2. #包括<与QSqlTableModel>  
  3. 一流 的LoginDialog: 公众 被QDialog  
  4. {  
  5.     Q_OBJECT  
  6. 市民:  
  7.     明确 一个LoginDialog(QWidget的*父= 0);  
  8.     的QString的GetName();  
  9.     的QString GetPwd();  
  10. 信号:  
  11. 公共 插槽:  
  12.     空隙 login_clicked();  
  13. 私人:  
  14.     QLabel的* LABEL_NAME;  
  15.     QLabel的* label_Pwd;  
  16.     QLineEdit * LINE_NAME;  
  17.     QLineEdit * line_Pwd;  
  18.     QPushButton * btn_Login;  
  19.     QPushButton * btn_Cancle;  
  20.     QString的名称;  
  21.     QString的密码;  
  22. };  
  23. #ENDIF // LOGINDIALOG_H  

 

logindialog.cpp

[CPP]  鉴于普通副本
  1. #包括“logindialog.h”  
  2. 一个LoginDialog ::一个LoginDialog(QWidget的*父):  
  3.     QDialog的(父)  
  4. {  
  5.     LABEL_NAME =  的QLabel(TR(“ 登录名”));  
  6.     label_Pwd =  的QLabel(TR(“ 密码”));  
  7.     LINE_NAME =  QLineEdit();  
  8.     line_Pwd =  QLineEdit();  
  9.     btn_Login =  QPushButton(TR(“ 确认”));  
  10.     btn_Cancle =  QPushButton(TR(“ 取消”));  
  11.   
  12.     line_Pwd-> setEchoMode(QLineEdit ::密码);  
  13.     label_Name-> setMaximumWidth(40);  
  14.     label_Pwd-> setMaximumWidth(40);  
  15.     line_Name-> setMaximumWidth(100);  
  16.     line_Pwd-> setMaximumWidth(100);  
  17.     QHBoxLayout * H1 =  QHBoxLayout();  
  18.     QHBoxLayout * H2 =  QHBoxLayout();  
  19.     QHBoxLayout * H3 =  QHBoxLayout();  
  20.     H1-> addWidget(LABEL_NAME);  
  21.     H1-> addWidget(LINE_NAME);  
  22.     H2-> addWidget(label_Pwd);  
  23.     H2-> addWidget(line_Pwd);  
  24.     H3 - > addWidget(btn_Login);  
  25.     H3 - > addWidget(btn_Cancle);  
  26.     QVBoxLayout * V =  QVBoxLayout();  
  27.     V-> addLayout(H1);  
  28.     v型> ​​addLayout(H2);  
  29.     V-> addLayout(H3);  
  30.     - > setLayout(V);  
  31.     - >调整大小(200,150);  
  32.     - > setMaximumSize(200,150);  
  33.     连接(btn_Cancle,信号(点击()), 这个,槽(接近()));  
  34.     连接(btn_Login,信号(点击()), 这个,槽(login_clicked()));  
  35. }  
  36. 无效 的LoginDialog :: login_clicked()  
  37. {  
  38.     名称= line_Name->文本();  
  39.     PWD = line_Pwd->文本();  
  40.     QSqlTableModel的模式;  
  41.     model.setTable(“ 学生” );  
  42.     model.setFilter(TR(“ID =”%1“和pwd ='%2'”).arg(名称).arg(PWD));  
  43.     model.select();  
  44.     如果(model.rowCount()== 1)//查询到有一个结果  
  45.     {  
  46.         同意();//隐含窗口,并返回结果QDialg ::接受  
  47.     }其他  
  48.     {  
  49.         QMessageBox提示::警告(,TR(“ 警告”),TR(“ 用户名或者密码不正确”));  
  50.         line_Name->清除();  
  51.         line_Pwd->清除();  
  52.         line_Name->的setFocus();  
  53.     }  
  54. }  
  55. //返回登陆名  
  56. 的QString ::的LoginDialog的GetName()  
  57. {  
  58.     返回 名称;  
  59. }  
  60. //返回密码  
  61. QString的一个LoginDialog :: GetPwd()  
  62. {  
  63.     返回 PWD;  
  64. }  

 

widget.h:

[CPP]  鉴于普通副本
  1. #ifndef WIDGET_H  
  2. #定义WIDGET_H  
  3. #包括<QWidget的>  
  4. #包括<与QSqlTableModel>  
  5. 命名空间 UI {  
  6.     一流的 窗口小部件;  
  7. }  
  8.  小工具: 公开 的QWidget  
  9. {  
  10.     Q_OBJECT  
  11. 市民:  
  12.     明确的 窗口小部件(即QString N,即QString磷,QWidget的*父= 0);  
  13.     〜小工具();  
  14. 私人:  
  15.     UI控件:: * UI;  
  16.     QString的名称;  
  17.     QString的密码;  
  18.     * QSqlTableModel的模型;  
  19. };  
  20. #ENDIF // WIDGET_H  


widget.cpp

[CPP]  鉴于普通副本
  1. #包括“widget.h”  
  2. #包括“ui_widget.h”  
  3. 小工具::小工具(即QString N,即QString磷,QWidget的*父):  
  4.     QWidget的(父),  
  5.     UI( UI ::控件)  
  6. {  
  7.     UI-> setupUi();  
  8.     名称= N;  
  9.     PWD = P;  
  10.     模式=  QSqlTableModel的(这个);  
  11.     模型- >可设置(“学生”);  
  12.     模型- >使用setFilter(TR(“ID =”%1“”).arg(名));  
  13.     模型 - >选择();  
  14.     UI-> label->的setText(TR(“%1,欢迎您您的信息如下:” ).arg(名));  
  15.     UI-> tableView->则setModel(模型);  
  16.     UI-> tableView-> resizeColumnsToContents();  
  17.     UI-> tableView-> setEditTriggers(QAbstractItemView :: NoEditTriggers);  
  18.   
  19. }  
  20.   
  21. 小工具::〜小工具()  
  22. {  
  23.     删除 的用户界面;  
  24. }  

 

main.cpp中

[CPP]  鉴于普通副本
  1. #包括<QtGui /的QApplication>  
  2. #包括<QTextCodec>  
  3. #包括<QSqlDatabase>  
  4. #包括<QSqlError>  
  5. #包括“widget.h”  
  6. #包括“logindialog.h”  
  7. 静态 布尔 创建连接()  
  8. {  
  9.     QSqlDatabase DB = QSqlDatabase :: addDatabase(“QSQLITE”);  
  10.     db.setDatabaseName(“ 学生” );  
  11.     如果 (!db.open()){  
  12.         QMessageBox提示::关键(0,qApp-> TR(“ 无法打开数据库” ),  
  13.             qApp-> TR(“ 无法建立数据库连接。/ N”  
  14.                      “这个例子需要的SQLite支持,请仔细阅读”  
  15.                      “Qt的SQL驱动程序文档,以了解如何”  
  16.                      “来构建它。/ N / N”  
  17.                      “单击取消退出。”),QMessageBox 提示::取消);  
  18.         返回 ;  
  19.     }  
  20.     返回 ;  
  21. }  
  22. INT 主要(INT ARGC, 字符 *的argv [])  
  23. {  
  24.     的QApplication A(的argc,argv的);  
  25.     QTextCodec :: setCodecForTr(QTextCodec :: codecForName(“GB18030”));  
  26.     如果(!创建连接())  
  27.     {  
  28.         返回 1;  
  29.     }  
  30.     一个LoginDialog升;  
  31.     QString的名称;  
  32.     QString的密;  
  33.     如果(l.exec()==被QDialog ::接受)  
  34.     {  
  35.         名称= l.GetName();  
  36.         PWD = l.GetPwd();  
  37.         窗口小部件W(姓名,PWD);  
  38.         w.show();  
  39.         返回 a.exec();  
  40.     }其他  
  41.     {  
  42.         返回 0;  
  43.     }  
  44. }  

 


运行结果:


登陆界面:


正确:

 

错误:





下面是我用public成员做的一个例子:

不能上传附件,在资源类里

http://download.csdn.net/detail/kimherojae/8024259



0 0
原创粉丝点击