QT教程
QT框架——C++语言
#include
#include
int main(int argc,char *argv[]){
QApplication app(argc,argv);
//添加程序
return app.exec();
}
- QObject:所有能够处理Signal、slot和事件的Qt对象的基类
- QApplication:对于一个应用程序是必类实体化是必须的,是QObject的子类
- QWidget:是所有用户接口对象的基类,它继承了QObject类的属性。用户接口对象也称组件——QDialog、QMainWindow、QFrame直接继承QWidget类
Qt中采用信号和槽来实现通信
QT创建工程
- Empty Qt4 Project
- 只创建“工程名.pro”的工程文件
- 需要手动创建,编辑输入纯源码程序
- Qt4 Gui Application(Qt Gui应用)
- 自动创建“工程名.pro”文件
- 自动创建“类名.cpp“
- 自动创建”类名.h“
- 自动创建“main.cpp”
- 自动创建“类名.ui”,编译后生成“ui_类名.h”
QtGui创建
- QMainWindow类提供一个有菜单条、锚接窗口(工具条)、状态条的主应用程序窗口
- QDialog类是对话框窗口的基类。最普通的顶级窗口
- Qwidget类是所有用户界面对象的基类
- QMainWindow、QDialog、QFrame直接继承Qwidget类
QT创建多窗口应用
1、创建第一个窗口nGui
2、右键nGUI — add new
3、编辑第一个dialog页面
4、添加槽函数
- F4拖拽添加
- 利用+添加——但是如果要自定义槽函数,此种方法不可行
- 右键Go to Slot
要实现的功能:单击按钮使对话框关闭并发出Accepted信号功能
5、在主函数中编写逻辑
#include "ngui.h"
#include "mydlg.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
nGui w;
myDlg my1;
if(my1.exec()==QDialog::Accepted){
w.show();
return a.exec();
}
else{
return 0;
}
}
如果ui界面出现灰色,使用F3启用编辑
6、编写第二个widget界面
7、在widget.h中声明dialog的实体类
myDlg my2;
8、在widget.cpp中的槽函数中展示实体类
my2.show()
9、页面效果展示
QT实现登录对话框——无链接数据库
1、创建登录窗口ui界面
2、建立对应的槽函数
退出
登录
void LoDlg::on_login_clicked()
{
//判断账户密码正确,trimmed用来防止输入用户名出现空格干扰
if(ui->user->text().trimmed()=="qt"&&ui->pwd->text()=="123456"){
accept();
}
else{
QMessageBox::warning(this,"WARNING","username or password Error!",QMessageBox::Yes);
//如果密码和账户输入错误,则清空输入框并聚焦于第一个输入框
ui->user->clear();
ui->pwd->clear();
ui->user->setFocus();
}
}
3、编写主函数
#include "login.h"
#include "lodlg.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
login w;
LoDlg login;
//先弹出登录,登录成功跳转到主页面
if(login.exec()==QDialog::Accepted)
{
w.show();
return a.exec();
}
else
{
return 0;
}
}
4、编写主页面ui界面
5、运行结果
QT操作sqlite数据库实现Slider
1、设计ui界面
2、在pro工程文件中添加sql
QT += sql
3、创建头文件连接数据库、创建数据库——connection.h
#ifndef CONNECT_H
#define CONNECT_H
#include
#include
static bool createConnection(){
//type of db :Qsqlite
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
//name of db :test
db.setDatabaseName("test.db");
//db can not open
if(!db.open()){
return false;
}
//create a class named 'query'
QSqlQuery query;
//create a table named 'record'
query.exec("create table record(id integer primary key autoincreament,temperature integer)");
//insert data
query.exec("insert into record values(1,1)");
return true;
}
#endif // CONNECT_H
4、申明页面对应的槽函数——slider.h
#ifndef SLIDER_H
#define SLIDER_H
#include
QT_BEGIN_NAMESPACE
namespace Ui { class slider; }
QT_END_NAMESPACE
class slider : public QMainWindow
{
Q_OBJECT
public:
slider(QWidget *parent = nullptr);
~slider();
private slots:
void on_pushButton_clicked();
void on_verticalSlider_valueChanged(int value);
private:
Ui::slider *ui;
};
#endif // SLIDER_H
5、编写槽函数逻辑和初始化代码——slider.cpp
#include "slider.h"
#include "ui_slider.h"
#include "connect.h"
QString lastvalue;
slider::slider(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::slider)
{
ui->setupUi(this);
QSqlQuery query;
//select DESC
query.exec("select * from record order by id DESC");
//first record will be writen down,and then move until last one
query.next();
//transform the type of 'temperature' into Integer
int c = query.value(1).toInt();
//set initialized location about slider
ui->verticalSlider->setValue(c);
}
slider::~slider()
{
delete ui;
}
void slider::on_verticalSlider_valueChanged(int value)
{
QString v = QString::number(value);
ui->label->setText(v);
lastvalue = v;
}
void slider::on_pushButton_clicked()
{
QSqlQuery query;
QString sql = "insert into record(temperature) values("+lastvalue +")";
query.exec(sql);
qApp->quit();
}
6、完善主函数逻辑——main.cpp
#include "slider.h"
#include "connect.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if(!createConnection){
return 1;
}
slider w;
w.show();
return a.exec();
}
QT实现登录对话框——链接数据库
1、设计页面——登录注册+LCD显示主页面
2、在pro工程文件中添加sql
3、创建数据库头文件——connection.h
#ifndef CONNECT_H
#define CONNECT_H
#include
#include
#include
#include
static bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("data.db");
if(!db.open())
{
QMessageBox box;
box.setText("open database failure!");
box.exec();
return false;
}
QSqlQuery query;
QString s="create table login(name varchar(10) primary key, passwd varchar(20))";
qDebug()<
4、申明页面对应的槽函数——login.h、mainwindow.h
#ifndef LOGINDLG_H
#define LOGINDLG_H
#include
#include
namespace Ui {
class loginDlg;
}
class loginDlg : public QDialog
{
Q_OBJECT
public:
explicit loginDlg(QWidget *parent = 0);
~loginDlg();
private slots:
void on_loginBtn_clicked();
void on_registerBtn_clicked();
private:
Ui::loginDlg *ui;
QMessageBox box;
};
#endif // LOGINDLG_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_exitBut_clicked();
void on_dial_valueChanged(int value);
private:
Ui::MainWindow *ui;
QSqlQueryModel *querymodel;
};
#endif // MAINWINDOW_H
5、完善login.cpp、main.cpp、mainwindow.cpp代码逻辑
#include "logindlg.h"
#include "ui_logindlg.h"
#include
#include
loginDlg::loginDlg(QWidget *parent) :
QDialog(parent),
ui(new Ui::loginDlg)
{
ui->setupUi(this);
ui-> pwdLineEdit-> setEchoMode(QLineEdit::Password);
}
loginDlg::~loginDlg()
{
delete ui;
}
//登录
void loginDlg::on_loginBtn_clicked()
{
QString user = ui->usrLineEdit->text();
QString pass = ui->pwdLineEdit->text();
if(user.isEmpty()||pass.isEmpty())
{
box.setText("user or pass is empty");
box.exec();
}
else
{
QString s=QString("select * from login where name=='%1'").arg(user);
qDebug() << s;
QSqlQuery query;
if(query.exec(s))
{
if(query.first())
{
if(query.value(1).toString()==pass)
{
box.setText("login success");
box.exec();
accept();
}
else
{
box.setText("passwd is wrong");
box.exec();
}
}
else
{
box.setText("user is not exist");
box.exec();
}
}
}
}
//注册
void loginDlg::on_registerBtn_clicked()
{
QString user = ui->usrLineEdit->text();
QString pass = ui->pwdLineEdit->text();
if(user.isEmpty()||pass.isEmpty())
{
box.setText("user or pass is empty");
box.exec();
}
else
{
QString s = QString("insert into login values('%1','%2')").arg(user).arg(pass);
qDebug()<usrLineEdit->clear();//清空用户名输入框
ui->pwdLineEdit->clear();//清空密码输入框
ui->usrLineEdit->setFocus();//将光标转到用户名输入框
}
#include
#include "mainwindow.h"
#include "logindlg.h"
#include "connect.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
if(!createConnection())
{
return false;
}
MainWindow w;
loginDlg login;
if(login.exec()==QDialog::Accepted)
{
w.show();
return a.exec();
}
else return 0;
}
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
querymodel = new QSqlQueryModel(this);
QString s = "select * from lcd";
querymodel->setQuery(s);
ui->tableView->setModel(querymodel);
QSqlQuery query;
if(query.exec(s))
{
query.last();
int c = query.value(1).toInt();
ui->dial->setValue(c);
ui->lcdNumber->display(c);
}
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_exitBut_clicked()
{
int n = ui->dial->value();
QString s =QString("insert into lcd(n) values(%1)").arg(n);
qDebug()<exit();
}
void MainWindow::on_dial_valueChanged(int value)
{
ui->lcdNumber->display(value);
}