- 实验1 创建登录对话框
① QString 类的trimmed()函数实现保证用户名输入正确,去除字符串前后的空格。
②登录失败后,希望可以清空用户名和密码信息,并将光标定位到用户名输入框中,可以用如下代码实现:
ui->usrLineEdit->clear();
ui->pwdLineEdit->clear();
ui->usrLineEdit->setFocus();
实现代码:
void LoginDialog::on_loginBtn_clicked()
{
// 判断用户名和密码是否正确,如果错误则弹出警告对话框
if(ui->usrLineEdit->text().trimmed() == tr("yafeilinux") && ui->pwdLineEdit->text() ==tr("123456"))
{
accept();
}
else
{
QMessageBox::warning(this, tr("Waring"), tr("user name or password error!"), QMessageBox::Yes);
// 清空内容并定位光标
ui->usrLineEdit->clear();
ui->pwdLineEdit->clear();
ui->usrLineEdit->setFocus();
}
}
- 实验2 定时器和随机数
①这里使用了QTime类的secsTo()函数,它表示两个时间点之间所包含的秒数,比如代码中就是指从零点整到当前时间所经过的秒数。
②使用qrand()%5 产生5 以内的随机数,并使用这个随机数来获取图片名称。
③右击“开始”按钮和“停止”按钮,选择转到槽,然后选择clicked()
信号。将对应的槽函数修改如下:
// 开始按钮
void Widget::on_pushButton_clicked()
{
timer->start(1000);
}
// 停止按钮
void Widget::on_pushButton_2_clicked()
{
timer->stop();
}
/*
使用start()来启动定时器,其中参数用来指定溢出时间间隔,单位为毫秒。这里设置
为1000,表明每隔1 秒发射一次timeout()信号。如果要停止定时器,可以调用stop()函
数。
*/
实现代码:
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
ui->setupUi(this);
//关联定时器溢出信号和相应的槽函数
timer = new QTimer(this);
connect(timer, &QTimer::timeout, this && Widget::timerUpdate);
qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerUpdate()
{
//获取系统现在的时间
QDateTime time = QDateTime::currentDateTime();
//设置系统时间显示格式
QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");
//在标签上显示时间
ui->lineEdit->setText(str);
int rand = qrand() % 5; // 产生5 以内随机整数即0-4
ui->label>setPixmap(QString(":/images.qrc/%1.png").arg(rand));
}
void Widget::on_pushButton_clicked()
{
timer->start(1000);
}
}
void Widget::on_pushButton_2_clicked()
{
timer->stop();
}
- 实验3 使用MySQL数据库
①如何在MySQL中创建数据库?
(1)首先到MyQSL 的安装目录C:\MySQL\bin 目录下运行mysqld.exe 程序,该程序运行完成后会自动关闭。
(2)运行cmd。
(3)cd C:\MySQL\bin,跳转到安装目录下。
(4)然后输入下面的命令:mysql –uroot –p,使用root 用户来登陆MySQL,因为默认密码是空的,所以这里不用设置密码。运行这行代码会提示Enter password,这时敲回车即可。
(5)登录MySQL 以后,使用面的命令来查看现有的数据库:show databases;注意后面有个分号。
(6)可以看到,这里现在已经有几个数据库了,它们是MySQL 需要的。
(7)这里不使用已经有的数据库,而是新建自己的数据库,下面新建名为mydata 的数据库:create database mydata;
(8)再次查看已经存在的数据库,发现显示出了刚才创建的数据库。
(9)完成后,输入exit 命令退出MySQL。
② 如何测试MySQL程序?
实现核心代码:
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QStringList>
#include <QSqlQuery>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 输出可用数据库
qDebug() << "Available drivers:";
QStringList drivers = QSqlDatabase::drivers();
foreach(QString driver, drivers)
qDebug() << driver;
// 打开MySQL
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setDatabaseName("mydata");
db.setUserName("root");
db.setPassword("");
if (!db.open())
qDebug() << "Failed to connect to root mysql admin";
else
qDebug() << "open";
QSqlQuery query(db);
//注意这里varchar 一定要指定长度,不然会出错
query.exec("create table student(id int primary key,name varchar(20))");
query.exec("insert into student values(1,'xiaogang')");
query.exec("insert into student values(2,'xiaoming')");
query.exec("insert into student values(3,'xiaohong')");
query.exec("select id,name from student where id >= 2");
while(query.next())
{
int value0 = query.value(0).toInt();
QString value1 = query.value(1).toString();
qDebug() << value0 << value1 ;
}
return a.exec();
}
然后记得把C:\MySQL\lib中的libmysql.dll复制到工程实现目录下,在运行程序,结果如下:
大功告成!!
- 实验4 程序的发布
发布程序时,要使用release 版本。在桌面新建一个文件夹,将release版本中的exe复制过来,再去Qt 安装目录的bin 目录中将libgcc_s_dw2-1.dll 、libstdc+±6.dll、libwinpthread-1.dll、Qt5Core.dll、Qt5Gui.dll 和Qt5Widgets.dll 这6 个文件复制过来,另外,还需要将C:\Qt\Qt5.6.1\5.6\mingw49_32\plugins 目录中的platforms 文件夹复制过来(不要修改该文件夹名称),里面只需要保留qwindows.dll 文件即可。