QT学习记录(一)


QT简介
是跨平台图形节目的引擎,其优点为跨平台,接口简单,容易上手。

一、创建项目

点击文件,新建文件或项目
在这里插入图片描述
创建一个桌面Qt应用,包含一个基于Qt设计师的主窗体。
在这里插入图片描述
设置名字和路径
在这里插入图片描述
构建套件
在这里插入图片描述
QWidget是QMainWindow和QDialog的父类,选择QWidget。
在这里插入图片描述
版本控制系统选择,团队开发比较重要。比如说svn,vss,git等。
在这里插入图片描述
至此,成功创建一个QT项目。
在这里插入图片描述
初始项目解读
main.cpp文件中

#include "maingui.h"   //导入gui
#include <QApplication>  //包含一个应用程序的头文件

int main(int argc, char *argv[])
{
    //应用程序对象,在QT中应用程序对象有且仅有一个
    QApplication a(argc, argv);
    //其父类为QWidget
    MainGUI w;
    //窗口对象默认不会显示,必须调用show方法显示窗口。
    w.show();
    //让应用程序进入消息循环,相当于让代码阻塞到这一行,后面代码不执行。
    return a.exec();
}

maingui.h中

#ifndef MAINGUI_H
#define MAINGUI_H

#include <QWidget> //包含头文件,QWidget窗口类

namespace Ui {
class MainGUI;
}

class MainGUI : public QWidget //继承自QWidget
{
    Q_OBJECT  //Q_OBJECT宏,允许类中使用信号和槽的机制

public:
    explicit MainGUI(QWidget *parent = nullptr); //构造函数
    ~MainGUI();  //析构函数

private:
    Ui::MainGUI *ui;
};

#endif // MAINGUI_H

二、命名规范以及快捷键

①、类名,首字母大写,单词和单词之间首字母大写
②、函数名,变量名称,手写字母小写,单词和单词之间首字母大写
③、注释
ctrl+/
④、运行
ctrl+r
⑤、字体缩放
ctrl+鼠标滚轮
⑥、查找
ctrl+F
⑦、整行移动
ctrl+shift+↑或↓
⑧、帮助文档
F1
⑨、自动对齐
ctrl+F
⑩、同名之间的.h和.cpp切换
F4
帮助文档在的位置:
Qt\5.9.8\msvc2013_64\bin 的 assistant.exe,打开即可。

三、创建一个按钮

可直接在gui界面拖拽一个button,也可以引入头文件

#include <QPushButton>  //按钮控件的头文件

然后进行创建按钮

QPushButton *btn=new QPushButton;
//让btn对象依赖在myWidget窗口中
btn->setParent(this);//this是当前对象
//显示文本
btn->setText("你好");

完整的maingui.cpp代码

#include "maingui.h"
#include "ui_maingui.h"
#include <QPushButton>  //按钮控件的头文件

MainGUI::MainGUI(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MainGUI)
{
    this->setWindowFlags(Qt::Dialog|Qt::FramelessWindowHint);  //去掉标题栏目
	//setWindowFlags(Qt::Dialog);   //窗体没有最大化最小化按钮
    ui->setupUi(this);

    QPushButton *btn=new QPushButton;
    //让btn对象依赖在myWidget窗口中
    btn->setParent(this);//this是当前对象
    //显示文本
    btn->setText("你好");
    //创建第二个按钮
    QPushButton *btn2=new QPushButton("世界",this);
    //移动按钮
    btn2->move(100,100);
    //重置窗口的大写
    //resize(600,400);
    //设置窗口的标题
    setWindowTitle("第一个程序");
	//setFixedSize(1080,800);
    //设置固定窗口大小
}

MainGUI::~MainGUI()
{
    delete ui;
}

四、添加一个类的方法

在这里插入图片描述

定义好类名字以及父类在这里插入图片描述

五、信号与槽

connect(信号的发送者,发送的具体信号,信号的接受者,信号的处理(槽))
点击按钮关闭窗口

//创建按钮的对象
MyPushButton *mbtn=new MyPushButton;
mbtn->setText("退出");
mbtn->move(1860,0);
mbtn->setParent(this); //设置到对象树中
//参数一:信号发出者  参数二:发送的信号  参数三:信号的接受者  参数四:处理的槽函数
connect(mbtn,&QPushButton::clicked,this,&MainGUI::close); //点击后关掉窗口

六、完整例子

总共有如下几个文件
在这里插入图片描述
student.h文件中

#ifndef STUDENT_H
#define STUDENT_H

#include <QObject>

class Student : public QObject
{
    Q_OBJECT
public:
    explicit Student(QObject *parent = nullptr);
    //返回值void,需要声明喝实现,也可以有参数,可以发生重载
    void treat();
    void treat(QString foodname);
signals:
};

#endif // STUDENT_H

teacher.h文件中

#ifndef TEACHER_H
#define TEACHER_H
#include <QObject>
class Teacher : public QObject
{
    Q_OBJECT
public:
    explicit Teacher(QObject *parent = nullptr);
signals:
    //自定义信号
    //返回值为void,只需要声明,不需要实现
    //可以有参数,可以重载
    void hungry();
    void hungry(QString foodname);
};
#endif // TEACHER_H

widget.h文件中

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<student.h>
#include<teacher.h>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    Ui::Widget *ui;
    Teacher *tea;
    Student *stu;
    void classover();
};
#endif // WIDGET_H
main.cpp文件中
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

student.cpp文件中

#include "student.h"
#include<QDebug>
Student::Student(QObject *parent) : QObject(parent)
{

}
void Student::treat()
{
    qDebug()<<"请客吃饭";
}
void Student::treat(QString foodname)
{
    //foodname会出现引号
    qDebug()<<"要吃"<<foodname;
    //改成如下,去掉引号
	//qDebug()<<foodname.toUtf8().data();
}

teacher.cpp文件中

#include "teacher.h"
Teacher::Teacher(QObject *parent) : QObject(parent)
{
}

widger.cpp文件中

#include "widget.h"
#include "ui_widget.h"
#include "teacher.h"
#include "student.h"
#include<QPushButton>
//Teacher类 老师
//Student类  学生类
//下课后,老师会触发一个信号,饿了,学生响应信号,请客吃饭
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //创建一个老师的对象
    this->tea=new Teacher(this);
    //创建一个学生的对象
    this->stu=new Student(this);
    //老师饿了,学生请客的链接
    //连接不带参数的信号与槽
	//connect(tea,&Teacher::hungry,stu,&Student::treat);
    //连接带参数的信号与槽,发生重载后,不能区分出来。
    //指针可以指向地址,函数指针可以指向地址
    void(Teacher::*teachersignal)(QString)=&Teacher::hungry;
    void(Student::*studentslot)(QString)=&Student::treat;
    connect(tea,teachersignal,stu,studentslot);
    //调用下课函数
    classover();
    QPushButton *btn=new QPushButton("下课",this);
    this->resize(600,400);
    //点击按钮触发下课事件
	//connect(btn,&QPushButton::clicked,this,&Widget::classover);
    //信号连接信号
    void(Teacher::*teachersignal2)(void)=&Teacher::hungry;
    void(Student::*studentslot2)(void)=&Student::treat;
    connect(tea,teachersignal2,stu,studentslot2);
    connect(btn,&QPushButton::clicked,tea,teachersignal2);
    //断开信号
    //参数为连接的四个参数,之后就不可用了
	//disconnect(tea,teachersignal2,stu,studentslot2);
    //信号可以连接信号
    //一个信号可以连接多个槽函数
    //多个信号可以连接一个槽函数
    //信号和槽函数的参数类型一定一致
    //信号和槽的参数个数,不需要一致,信号的参数个数可以多于槽的参数个数
}
void Widget::classover()
{
    //下课了,调用老师饿了的信号
    emit tea->hungry("小串");
}
Widget::~Widget()
{
    delete ui;
}

七、总结

此为第一部分qt学习记录,学习了qt的一些基本操作和信号与槽的机制,代码按照b站上课程进行练习的,慢慢打基础吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

血狼傲骨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值