该种方法是利用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:
- #包括<被QDialog>
- #包括<与QSqlTableModel>
- 一流 的LoginDialog: 公众 被QDialog
- {
- Q_OBJECT
- 市民:
- 明确 一个LoginDialog(QWidget的*父= 0);
- 的QString的GetName();
- 的QString GetPwd();
- 信号:
- 公共 插槽:
- 空隙 login_clicked();
- 私人:
- QLabel的* LABEL_NAME;
- QLabel的* label_Pwd;
- QLineEdit * LINE_NAME;
- QLineEdit * line_Pwd;
- QPushButton * btn_Login;
- QPushButton * btn_Cancle;
- QString的名称;
- QString的密码;
- };
- #ENDIF // LOGINDIALOG_H
logindialog.cpp
- #包括“logindialog.h”
- 一个LoginDialog ::一个LoginDialog(QWidget的*父):
- QDialog的(父)
- {
- LABEL_NAME = 新 的QLabel(TR( “ 登录名” ));
- label_Pwd = 新 的QLabel(TR( “ 密码” ));
- LINE_NAME = 新 QLineEdit();
- line_Pwd = 新 QLineEdit();
- btn_Login = 新 QPushButton(TR( “ 确认” ));
- btn_Cancle = 新 QPushButton(TR( “ 取消” ));
- line_Pwd-> setEchoMode(QLineEdit ::密码);
- label_Name-> setMaximumWidth(40);
- label_Pwd-> setMaximumWidth(40);
- line_Name-> setMaximumWidth(100);
- line_Pwd-> setMaximumWidth(100);
- QHBoxLayout * H1 = 新 QHBoxLayout();
- QHBoxLayout * H2 = 新 QHBoxLayout();
- QHBoxLayout * H3 = 新 QHBoxLayout();
- H1-> addWidget(LABEL_NAME);
- H1-> addWidget(LINE_NAME);
- H2-> addWidget(label_Pwd);
- H2-> addWidget(line_Pwd);
- H3 - > addWidget(btn_Login);
- H3 - > addWidget(btn_Cancle);
- QVBoxLayout * V = 新 QVBoxLayout();
- V-> addLayout(H1);
- v型> addLayout(H2);
- V-> addLayout(H3);
- 这- > setLayout(V);
- 这- >调整大小(200,150);
- 本- > setMaximumSize(200,150);
- 连接(btn_Cancle,信号(点击()), 这个,槽(接近()));
- 连接(btn_Login,信号(点击()), 这个,槽(login_clicked()));
- }
- 无效 的LoginDialog :: login_clicked()
- {
- 名称= line_Name->文本();
- PWD = line_Pwd->文本();
- QSqlTableModel的模式;
- model.setTable( “ 学生” );
- model.setFilter(TR(“ID =”%1“和pwd ='%2'” ).arg(名称).arg(PWD));
- model.select();
- 如果(model.rowCount()== 1)//查询到有一个结果
- {
- 同意(); //隐含窗口,并返回结果QDialg ::接受
- } 其他
- {
- QMessageBox提示::警告(本,TR( “ 警告” ),TR( “ 用户名或者密码不正确” ));
- line_Name->清除();
- line_Pwd->清除();
- line_Name->的setFocus();
- }
- }
- //返回登陆名
- 的QString ::的LoginDialog的GetName()
- {
- 返回 名称;
- }
- //返回密码
- QString的一个LoginDialog :: GetPwd()
- {
- 返回 PWD;
- }
widget.h:
- #ifndef WIDGET_H
- #定义WIDGET_H
- #包括<QWidget的>
- #包括<与QSqlTableModel>
- 命名空间 UI {
- 一流的 窗口小部件;
- }
- 类 小工具: 公开 的QWidget
- {
- Q_OBJECT
- 市民:
- 明确的 窗口小部件(即QString N,即QString磷,QWidget的*父= 0);
- 〜小工具();
- 私人:
- UI控件:: * UI;
- QString的名称;
- QString的密码;
- * QSqlTableModel的模型;
- };
- #ENDIF // WIDGET_H
widget.cpp
- #包括“widget.h”
- #包括“ui_widget.h”
- 小工具::小工具(即QString N,即QString磷,QWidget的*父):
- QWidget的(父),
- UI(新 UI ::控件)
- {
- UI-> setupUi(本);
- 名称= N;
- PWD = P;
- 模式= 新 QSqlTableModel的(这个);
- 模型- >可设置(“学生” );
- 模型- >使用setFilter(TR(“ID =”%1“” ).arg(名));
- 模型 - >选择();
- UI-> label->的setText(TR( “%1,欢迎您您的信息如下:” ).arg(名));
- UI-> tableView->则setModel(模型);
- UI-> tableView-> resizeColumnsToContents();
- UI-> tableView-> setEditTriggers(QAbstractItemView :: NoEditTriggers);
- }
- 小工具::〜小工具()
- {
- 删除 的用户界面;
- }
main.cpp中
- #包括<QtGui /的QApplication>
- #包括<QTextCodec>
- #包括<QSqlDatabase>
- #包括<QSqlError>
- #包括“widget.h”
- #包括“logindialog.h”
- 静态 布尔 创建连接()
- {
- QSqlDatabase DB = QSqlDatabase :: addDatabase(“QSQLITE” );
- db.setDatabaseName( “ 学生” );
- 如果 (!db.open()){
- QMessageBox提示::关键(0,qApp-> TR( “ 无法打开数据库” ),
- qApp-> TR( “ 无法建立数据库连接。/ N”
- “这个例子需要的SQLite支持,请仔细阅读”
- “Qt的SQL驱动程序文档,以了解如何”
- “来构建它。/ N / N”
- “单击取消退出。” ),QMessageBox 提示::取消);
- 返回 假;
- }
- 返回 真;
- }
- INT 主要(INT ARGC, 字符 *的argv [])
- {
- 的QApplication A(的argc,argv的);
- QTextCodec :: setCodecForTr(QTextCodec :: codecForName(“GB18030” ));
- 如果(!创建连接())
- {
- 返回 1;
- }
- 一个LoginDialog升;
- QString的名称;
- QString的密;
- 如果(l.exec()==被QDialog ::接受)
- {
- 名称= l.GetName();
- PWD = l.GetPwd();
- 窗口小部件W(姓名,PWD);
- w.show();
- 返回 a.exec();
- } 其他
- {
- 返回 0;
- }
- }
运行结果:
登陆界面:
正确:
错误:
下面是我用public成员做的一个例子:
不能上传附件,在资源类里
http://download.csdn.net/detail/kimherojae/8024259