一、引用组件需要的类(头文件)
1、按钮类
QPushButton: 普通按钮;
QToolButton: 工具按钮;
QRadioButton: 单选按钮;
QCheckBox: 复选按钮;
QCommandLinkButton: 命令连接按钮;
2、布局类
QHBoxLayout水平
QVBoxLayout垂直
QGridLayout网格
QFormLayout表单
QSrackedLayout.堆栈
3、输出类
QLabel: 标签;
ob->setAlignment(QT::AlignCenter); //文本居中对齐
obj->setPixmap(QPixmap("文件名")); //设置标签图片
obj->setScaledContents(true); //自动缩放显示图片
QMovie *ob = new QMovie("文件名");
obj->setMove(ob); //设置标签动画
ob->start(); //开始播放QTextBrowser: 文本浏览器;
QCalendarWidget: 日历窗口;QLCDNumber: 七段数码管;
lcd->setDigitCount(n); //设置显示位数
lcd->display(n); //显示数字nProgressBar: 进度条;
pb->setValue(n); //显示进度n
QTimer *t = new QTimer;
connect(t, SIGNAL(timeout()), this, SLOT(updata_value()));
t->start(n);//每过n毫秒修改updata_value中的对象值
4、输入类
QComboBox: 组合框;
cmb->addItem("text"); //添加下拉选项QFontComBox: 字体下拉框;
QTextEdit: 文本编辑框;QLineEdit: 行编辑框;
setPlaceholderText("text"); //编辑框内的提示信息QSpinBox: 自旋框;
QTimeEdit: 调整时间;
QDial: 旋钮;QScrollBar: 滚动条;
setOrientation(Qt::Horizontal); //水平显示,默认垂直QSlider: 滑动杆;
setRange(x, y); //设置范围
setMaximum(m); //设置最大值
setSingleStep(m); //设置单步步长
5、容器
QGroupBox: 分组框;
g->setLayout(vbox); //将布局好的ui加入groupbox中
vbox->setwidget(g); //最终的布局使用setWidget装入groupbox窗口QWidget: 分组(无边框);
QScrollArea: 滚动窗口容器;
setWidget(lb); //将lb放入容器QToolBox: 工具栏;
QTabWidget: 制表容器;
setTabsClosable(true);//设置标签可关闭QStackedWidget: 栈容器;
二、使用组件对应的类 实例化对象(头文件)
#ifndef WIDGET_H
#define WIDGET_H//引用需要的类
#include <QWidget>
#include <QWidget>
#include <QDebug>
#include <QIcon>//图标类
#include <QPushButton>//按钮类
#include <QLabel>//标签类
#include <QMovie>//动画类
#include <QLineEdit>//行编辑器
#include <QMessageBox>//对话框QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;//声明对象(组件)//按键QPushButton *btn1;QPushButton *btn2;//标签QLabel *lab1;QLabel *lab2;QLabel *lab3;//抬头//行编辑器QLineEdit *edit1;QLineEdit *edit2;};
#endif // WIDGET_H
三、设置组件属性(原文件)
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//将自己的类绑定到Ui//1、设置窗口this->setFixedSize(499,375);//固定尺寸this->setWindowTitle("登录");//设置抬头名称this->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));//设置窗口图标//图片路径//2、为对象(组件)申请空间//按键btn1 = new QPushButton("登录",this);btn2 = new QPushButton("取消",this);//标签lab1 = new QLabel("账号",this);lab2 = new QLabel("密码",this);lab3 = new QLabel(this);//抬头//行编辑器edit1 = new QLineEdit(this);edit2= new QLineEdit(this);//3、对象属性编辑//尺寸btn1->resize(80,40);btn2->resize(80,40);edit1->resize(265,20);edit2->resize(265,20);lab1->resize(50,20);lab2->resize(50,20);lab3->resize(534,375/2);qDebug()<<lab1->width()<<lab1->height();//坐标btn1->move(113,285);btn2->move(534-133-100,btn1->y());lab1->move(btn1->x()-btn1->width()+32,btn1->y()-60);lab2->move(btn1->x()-btn1->width()+32,btn1->y()-30);edit1->move(lab1->x()+lab1->width(),lab1->y());edit2->move(lab2->x()+lab2->width(),lab2->y());//样式QMovie *lab3_movie = new QMovie(":/tabel/misak.gif");lab3_movie->start();lab3->setMovie(lab3_movie);//邦定//lab3->setScaledContents(true);//自适应尺寸//功能属性edit2->setEchoMode(QLineEdit::Password);edit2->setPlaceholderText("密码");//4、绑定信号与槽connect(btn1,&QPushButton::clicked,this,&Widget::Widget_btn1_slot);connect(btn2,&QPushButton::clicked,this,&Widget::Widget_btn2_slot);//在哪都可以,只要在使用前绑定就可以了//由于只需要绑定一次,为了方便和避免重复调用,会放在构造函数中//如果需要重复的解除绑定、重新绑定,则根据具体逻辑选择位置
}//槽函数定义
void Widget::Widget_btn1_slot()
{QLabel *lab4 = new QLabel;QLabel *lab5 = new QLabel;if(edit1->text() == 0){//QLabel *lab4 = new QLabel;lab4->setWindowTitle("账号为空");lab4->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));QMovie *lab4_movie = new QMovie(":/tabel/spase.webp");//动图路径lab4_movie->start();lab4->setMovie(lab4_movie);//绑定lab4->setScaledContents(true);//自适应尺寸lab4->show();}else if(edit1->text() == edit2->text()){qDebug()<<"login_success";emit jump_signals();//信号会发送给所有对象,但只有和该信号绑定的对象才会响应this->close();}else{qDebug()<<"false";//QLabel *lab5 = new QLabel;lab5->setWindowTitle("账号密码不正确");lab5->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));QMovie *lab5_movie = new QMovie(":/tabel/error.webp");lab5_movie->start();lab5->setMovie(lab5_movie);//绑定lab5->setScaledContents(true);//自适应尺寸lab5->show();edit2->clear();}
}void Widget::Widget_btn2_slot()
{QMessageBox box(QMessageBox::Information,"退出","确定退出吗?",QMessageBox::Ok | QMessageBox::No,this);box.setButtonText(QMessageBox::Ok,"确定");box.setButtonText(QMessageBox::No,"取消");int res = box.exec();if(res == QMessageBox::Ok){close();}
}
四、信号与槽 的设置(界面跳转开始设置)
1、头文件中声明 信号与槽
#ifndef WIDGET_H
#define WIDGET_H//引用需要的类
#include <QWidget>
#include <QWidget>
#include <QDebug>
#include <QIcon>//图标类
#include <QPushButton>//按钮类
#include <QLabel>//标签类
#include <QMovie>//动画类
#include <QLineEdit>//行编辑器
#include <QMessageBox>//对话框QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;//声明对象(组件)//按键QPushButton *btn1;QPushButton *btn2;//标签QLabel *lab1;QLabel *lab2;QLabel *lab3;//抬头//行编辑器QLineEdit *edit1;QLineEdit *edit2;public slots:void Widget_btn1_slot();//槽函数声明void Widget_btn2_slot();signals:void jump_signals();//跳转信号声明
};
#endif // WIDGET_H
2、原文件中定义 槽函数
//槽函数定义
void Widget::Widget_btn1_slot()
{QLabel *lab4 = new QLabel;QLabel *lab5 = new QLabel;if(edit1->text() == 0){//QLabel *lab4 = new QLabel;lab4->setWindowTitle("账号为空");lab4->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));QMovie *lab4_movie = new QMovie(":/tabel/spase.webp");lab4_movie->start();lab4->setMovie(lab4_movie);//绑定lab4->setScaledContents(true);//自适应尺寸lab4->show();}else if(edit1->text() == edit2->text()) //发送事件{qDebug()<<"login_success";//发送跳转信号emit jump_signals();//信号会发送给所有对象,但只有和该信号绑定的对象才会响应this->close();}else{qDebug()<<"false";//QLabel *lab5 = new QLabel;lab5->setWindowTitle("账号密码不正确");lab5->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));QMovie *lab5_movie = new QMovie(":/tabel/error.webp");lab5_movie->start();lab5->setMovie(lab5_movie);//绑定lab5->setScaledContents(true);//自适应尺寸lab5->show();edit2->clear();}
}void Widget::Widget_btn2_slot()
{QMessageBox box(QMessageBox::Information,"退出","确定退出吗?",QMessageBox::Ok | QMessageBox::No,this);box.setButtonText(QMessageBox::Ok,"确定");box.setButtonText(QMessageBox::No,"取消");int res = box.exec();if(res == QMessageBox::Ok){close();}
}
3、绑定对应的信号与槽
//4、绑定信号与槽connect(btn1,&QPushButton::clicked,this,&Widget::Widget_btn1_slot);connect(btn2,&QPushButton::clicked,this,&Widget::Widget_btn2_slot);//在哪都可以,只要在使用前绑定就可以了//由于只需要绑定一次,为了方便和避免重复调用,会放在构造函数中//如果需要重复的解除绑定、重新绑定,则根据具体逻辑选择位置
五、跳转目标界面设置
1、头文件
#ifndef LOG_SUCCESS_H
#define LOG_SUCCESS_H#include <QWidget>
#include <QLabel>//标签类
#include <QMovie>//动画类
#include <QIcon>//图标类namespace Ui {
class log_success;
}class log_success : public QWidget
{Q_OBJECTpublic:explicit log_success(QWidget *parent = nullptr);~log_success();private:Ui::log_success *ui;QLabel *lab4;QMovie *lab4_movie;public slots:void jump_slot();};#endif // LOG_SUCCESS_H
2、原文件
#include "log_success.h"
#include "ui_log_success.h"log_success::log_success(QWidget *parent) :QWidget(parent),ui(new Ui::log_success)
{ui->setupUi(this);//界面写在构造函数内的话 启动就会调用// 未将组件绑定到ui 需要单独调用lab4 = new QLabel;
// lab4 = new QLabel(this);//绑定到uilab4->setWindowTitle("登录成功");lab4->setWindowIcon(QIcon(":/tabel/kamijo_.webp"));lab4_movie = new QMovie(":/tabel/misak_mikoto.gif");lab4_movie->start();lab4->setMovie(lab4_movie);//绑定lab4->setScaledContents(true);//自适应尺寸}log_success::~log_success()
{delete ui;
}//跳转响应槽函数
void log_success::jump_slot()
{//单独调用log_success::lab4->show();//调用整个ui -> form//show();
}
六、绑定跳转信号和跳转响应槽函数(主函数)
#include "widget.h"
#include "log_success.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();log_success l;QObject::connect(&w, &Widget::jump_signals, &l, &log_success::jump_slot);return a.exec();
}