qt学习 (五) 登陆界面之连接按钮
登陆步骤是比对输入的账号密码与数据库中的表项目是否一致
一样, 跳出mainwidget对话框
不一样,跳出消息错误框
今天就是要进去,
因为进去以后是widget的窗口,所以把用来核对消息的数据库放在MAINwidget。cpp中,
再拿一个用户点击连接的子类 login.cpp, 就在这里面画用户登录账号密码textEdit
1 除了textEdit 基本都是button 慢慢加。 登录界面可以学的东西很多。

2 在widget。h文件中加入数据库所需要的头文件,
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
数据库有基本的驱动Qsqlite
有比较好的使用数据库的模式, 就是把数据库基本创建放在一个文件中, 查改增删都去调用这个就行了。
使用数据库的基本命令
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");//建数据库
db.setDatabaseName("mayplestory.db"); //命名数据库为may..
数据库初始化:query.exec(QObject::tr("create table mayplestory(id int primary key, name varchar(20), password varchar(20));"));
插入数据:query.exec(QObject::tr("insert into mayplestory values(0,'yuyuyu','123456');"));查询数据的方法:query.exec(QObject::tr("select * from mayplestory;"));
以上“”中的 是真正平时数据库的命令,着这里用tr表示输入。
3 数据库我们建立好了,那就读取ui上输入的数据来判断,和qt学习4里面的思路是一样的 ,
当判断成功,就放回accept信号到main()中。
现在怎么判断呢, 不在是
if(my1.exec() == QDialog::Accepted)
{
w.show();
}
而是用if(账号 == 数据库value(1)&& 密码 == 数据库value(2))
{
accept(); 发出accept信号表示成功
break; 把accept信号回送到main中。
}
最后在main函数中使用if判断是否成功,
if(login.exec() == QDialog::Accepted)
{
w.show();
return a.exec();
}
4 代码如下:
logindlg.h
#ifndef CONNECTION_H
#define CONNECTION_H #include <QDialog> namespace Ui {
class loginDlg;
} class loginDlg : public QDialog
{
Q_OBJECT public:
explicit loginDlg(QWidget *parent = );
~loginDlg(); private slots:
void on_loginBtn_clicked(); private:
Ui::loginDlg *ui; }; #endif // LOGINDLG_H
widget.h
#ifndef WIDGET_H
#define WIDGET_H #include <QWidget>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QDebug>
#include <QMessageBox>
#include <QCoreApplication>
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mayplestory.db");
if(!db.open())
{
QMessageBox::critical(,qApp->tr("Cannot open database"),qApp->tr("unable to estabilished a database connection"),QMessageBox::Cancel);
return false;
} qDebug() << "created begin";
QSqlQuery query;
query.exec(QObject::tr("create table mayplestory(id int primary key, name varchar(20), password varchar(20));"));
query.exec(QObject::tr("insert into mayplestory values(0,'yuyuyu','123456');")); // query.exec("select *from information");
qDebug() << "created end" ;
return true; }
namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
explicit Widget(QWidget *parent = );
~Widget(); private:
Ui::Widget *ui;
QSqlDatabase db; }; #endif // WIDGET_H
logindlg.cpp
#include "logindlg.h"
#include "ui_logindlg.h"
#include <QtGui>
#include "widget.h" loginDlg::loginDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::loginDlg)
{ ui->setupUi(this);
ui->pwdLineEdit->setEchoMode(QLineEdit::Password);
//ui->pushButton->setFlat(true); } loginDlg::~loginDlg()
{
delete ui;
} void loginDlg::on_loginBtn_clicked()
{ QSqlQuery query;
query.exec(QObject::tr("select * from mayplestory;")); while(query.next())
{ if(ui-> usrLineEdit->text().trimmed() == query.value()&& ui-> pwdLineEdit->text() == query.value() )
{
accept();
break;
}
if (query.next() == NULL)
{
QMessageBox::warning(this,tr("Warning"),tr("user name or password error !!!"),QMessageBox::Yes);
ui->usrLineEdit->clear();
ui->pwdLineEdit->clear();
ui->usrLineEdit->setFocus();
} } }
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(!createConnection())
qDebug()<<"unconnect";
else
qDebug()<<"connect";
login.show();
if(login.exec() == QDialog::Accepted)
{
w.show();
return a.exec();
}
else return ; }
widget.cpp
#include "widget.h"
#include "ui_widget.h" Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{ ui->setupUi(this);
} Widget::~Widget()
{
delete ui;
}
5.结果显示, 输入账号yuyuyu 和 密码 :
失败了:
成功:
qt学习 (五) 登陆界面之连接按钮的更多相关文章
- PyQt(Python+Qt)学习随笔:Designer中PushButton按钮default、atuoDefault属性
引言 1.default.atuoDefault属性仅在父窗口为对话窗才生效,其他窗口类型设置这两个属性没有意义: 2.按钮的按压触发除了鼠标键之外,也可以使用回车键和空格键触发,这两个属性正是控制回 ...
- JFinal Web开发学习(五)注册界面和后端验证
效果: 直接点击注册后 : 后端验证是可靠地,前端js验证是不可靠的.只需要在浏览器删除js验证代码即可突破js验证. 1.注册界面 在WebRoot下新建regist.jsp <%@ page ...
- PyQt(Python+Qt)学习随笔:Designer中PushButton按钮flat属性
flat属性用于确认按钮边框是否凸起,如果为False则凸起,如果为True则边框与背景是平坦的. 默认值为False,如果设置为True,则除非按下按钮,否则大多数样式都不会绘制按钮背景.通过使用s ...
- QT学习(五)----360界面制作(2终结)
继续上一章的360新特性界面.源代码:http://download.csdn.net/detail/zhangyang1990828/5241242 上一章中实现了整个界面的纯UI设计,这次我们让它 ...
- Qt 之 模仿 QQ登陆界面——样式篇
一.简述 今天晚上花了半天时间从QQ登录界面抠了些图,顺便加了点样式基本上实现了QQ的登陆界面全部效果.虽不说100%相似,那也有99.99%相似了哈O(∩_∩)O. QQ好像从去年开始,登录界面有了 ...
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的按钮改变缺省文字的方法
在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox增加自定义按钮的方法
在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...
- PyQt(Python+Qt)学习随笔:Designer中QDialogButtonBox确认clicked信号是哪个按钮发送的方法
一.引言 QDialogButtonBox本身只提供4种信号,分别是accepted.rejected.clicked和helpRequested,在<PyQt(Python+Qt)学习随笔:D ...
- PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButtons标准按钮
在Qt Designer中,可以在界面中使用QDialogButtonBox来配置一组按钮进行操作,Qt中为QDialogButtonBox定义了一组常用的标准按钮,可以在Designer中直接在St ...
随机推荐
- 处理警告:编码 GBK 的不可映射字符
怎么处理警告:编码 GBK 的不可映射字符:javac -encoding UTF-8 XX.java使用-encoding参数指明编码方式: 或者 用记事本打开文件,然后另存为,选择ANSI编码,覆 ...
- CTF | bugku | 速度要快
检查源码时发现有 <!-- OK ,now you have to post the margin what you find --> 检查响应头发现有 flag: 6LeR55qE6L+ ...
- window使用
运行命令 regedit #注册表编译器 firewall.cpl #打开防火墙配置 powershell #打开powershell control #打开控制面版 cnpa.cpl #打开网络设置 ...
- _new__和__init__的区别
__new__是Python面向对象语言中一个很少用的函数,更多使用的是__init__这个函数.例如: class Book(object): def __init__(self, title): ...
- pip安装第三方库报错Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None))...
pip安装第三方库时报错Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None))...,详细报错见下 ...
- spring boot 尚桂谷学习笔记04 ---Web开始
------web开发------ 1.创建spring boot 应用 选中我们需要的模块 2.spring boot 已经默认将这些场景配置好了 @EnableAutoConfiguration ...
- leetcode.双指针.524通过删除字母匹配到字典里最长单词-Java
1. 具体题目 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到.如果答案不止一个,返回长度最长且字典顺序最小的字符串.如果答案不存在,则返回空 ...
- python 批量爬取四级成绩单
使用本文爬取成绩大致有几个步骤:1.提取表格(或其他格式文件——含有姓名,身份证等信息)中的数据,为进行准考证爬取做准备.2.下载准考证文件并提取出准考证和姓名信息.3.根据得到信息进行数据分析和存储 ...
- 浮点字符串转int类型报错,解决
一,直接上代码,先转double,再强转int,看你是选择,舍入,还是直接取整数位 var a1 = "1500.76"; var a2 = Convert.ToDouble(a1 ...
- C#@字符的使用
一,在字符串中的使用 //当在字符串前面加上一个@字符的时候,我们就可以把一个字符串定义在多行 // 编译器不会再去识别字符串中的转义字符 // 如果需要在字符串中表示一个双引号的话,需要使用两个双引 ...


