QT学习心得

本文详细介绍了QT的起源、发展、特点和应用,以及QT Creator这一开发工具的使用。通过实例展示了QT的第一个程序,讲解了信号与槽机制、界面创建、基本窗口部件的使用。此外,还涵盖了QT中的QDialog、QMainWindow、QWidget的使用,以及QPushButton、QRadioButton、QLabel等控件的属性和方法。最后,文章提到了QT中的多线程编程,包括信号量、条件变量、读写锁和进程通信的概念与使用。
摘要由CSDN通过智能技术生成

一、QT的介绍
1、QT源头----GUI
    GUI------grphical user interface,图形用户接口,通过图形的方式操纵计算机用户界面
    人   计算机  通信   界面格式,通过计算机的外部接口(鼠标、键盘等等)来操纵计算机的用户界面
2、QT发展史
1991年--------------奇趣科技有限公司-------发明--------------基于C++图形用户界面框架
2008年--------------金融危机-----------奇趣科技有限公司出售QT-------诺基亚公司收购(symbian OS)
2012年--------------金融危机-----------诺基亚公司出售QT-----------芬兰digia(软件公司):QT具备了完备的图形库,并且跨平台的能力非常强、不仅用于桌面开发、嵌入式开发、移动开发等等
3、特点及应用
特点:
(1)跨平台
    windows、linux、freeBSD、BSD、symbian等操作系统上
(2)面向对象
    QT里封装的机制是非常完善(相关的类都是已经封装好),其它的编程方式跟C++一样
(3)丰富的API
    数据库(sqlite、mysql等等)、网络编程(network:UDP、TCP)、3D绘图、3D渲染、文件I/O等等
应用:
(1)记事本-----QT
(2)WPS
(3)股票系统
(4)汽车的码盘(仪表盘)
(5)极品飞车
(6)google地图
.............
4、开发工具
    windows-----QTCreator(社区版:免费 ,  商业版:收费)
5、QT的第一个程序
(1)工程文件:.pro
QT       += core gui   //引入界面相关的模块
//QT   +=sql
SOURCES += \    //放置源文件.cpp文件
        main.cpp \
        mydialog.cpp

HEADERS += \    //放置头文件.h文件
        mydialog.h

FORMS += \     //放置界面文件
        mydialog.ui
(2)头文件
#include <QDialog>  //只要是QT里提供的类,类的名字前面都有Q表示
Q_OBJECT :元对象宏,如果使用到信号与槽机制,就必须包含Q_OBJECT 
(3)源文件
 QDialog(parent)://类的构造函数的显示调用
ui->setupUi(this);//初始化界面的大小
(4)主程序文件
  MyDialog w; //创建一个对象(MyDialog继承自QDialog(界面类))
    w.show();  //显示MyDialog界面
return a.exec();//进入事件循环
(5)界面文件:.ui文件
4、帮助
(1)英语过关
(2)学会怎么去查看帮助
5、QT里的输出:QDebug类-----用于输出
    //第一种
    qDebug()<<"今天是学QT的一天"<<endl;
    //第二种
    qDebug("hello world");

二、信号与槽机制(重点)
    实现两个对象之间的通信的机制-----信号与槽机制,QQ好友关系-------connect函数来绑定两个对象。
connect函数:用于绑定两个对象,两个对象绑定了之后就可以正常进行通信,反之,则不能通信
connect函数的形式:
    connect(对象1 ,对象1发出的信号 , 对象2 ,对对象1发出的信号进行处理);//实现了对象1和对象2的绑定
对象1:是类1的实例化---对象1
对象2:是类2的实例化---对象2
对象1发出的信号:函数,该函数可以携带信息--------信号函数
对对象1发出的信号进行处理 :函数,可以对信号携带信息进行处理  -----槽函数
例如:
    connect(红绿灯 ,  绿灯亮信号 ,  车上的司机 , 过马路);
注:
    对象1--红绿灯:可以是指针或者是引用 
    对象2--车上的司机:可以是指针或者是引用    
    SIGNAL(函数) ;//表明该函数是一个信号
    SLOT(函数)://表明该函数是一个槽函数

    》如果在ui界面拖控件转到槽函数,那么编译器会自动对两个对象进行绑定(在QT内部实现connect的绑定)
例如:点击按钮,实现输出“hello world”
按钮(QPushButton)
提供的信号:
clicked():点击信号
pressed():鼠标按下
released():鼠标按下并释放
toggled():按钮按下再释放,释放再按下

1、使用内部提供的信号与槽函数
    那么编译器会自动对两个对象进行绑定(在QT内部实现connect的绑定),绑定之后就可以进行通信
2、使用自定义的信号与槽函数
    下课了        张老师     饿了       同学们    请张老师吃饭
注:
    emit来触发信号
    先绑定两个对象,再触发信号
(1)信号函数(信号)
a、信号放置在signals关键字下
b、信号只允许声明,不允许实现或者是定义
c、信号允许带参数
d、信号的参数个数必须大于等于槽函数的参数个数
e、信号的返回类型是void类型

(2)槽函数
a、槽函数放置在slots关键字下
private slots:表示只有当前类的信号与槽相关联
protected slots:表示不仅有当前类的信号与槽相关联,还可以有继承的类的信号与槽相关联
public slots:表示对所有的类的信号与槽相关联(一般是放置在public slots)
b、槽函数需要声明也需要实现或定义
c、槽函数也允许带参数
d、槽函数的参数个数必须小于等于信号的参数个数(等于的时候,参数的类型必须要一致)
e、槽函数的返回值类型也是void类型
(3)connect函数
    可以连接一个信号和槽,也可以连接两个信号
//一个信号,绑定多个槽
三、创建界面
    QT里提供了三个界面:QDialog类(对话框)、QMainWindow类(主窗体)、QWidget类(窗口)
1、QDialog类
    提供了一个简单的对话框,一般作为顶级窗口(窗口的最外层),其他窗口部件可以嵌入到该对话框里,该对话框不会嵌入到其他窗口里。
对话框:模态对话框和非模态对话框
(1)模态对话框
    该对话框通过模态的形式出现,后面的程序就会阻塞在这里,那么只有当关闭该对话框的时候,后面的程序才会执行,模态对话框通过调用exec()函数来实现。
(2)非模态对话框
    该对话框以非模态的形式出现,后面的程序就不会阻塞在这里,非模态对话框一般是通过调用show()函数来实现
2、QMainWindow类
    该类提供了菜单栏、工具栏、状态栏、工作区(浮动、漂浮、悬空等)等功能,一般也是不会嵌入到其他窗口里,通常作为顶级窗口
3、QWidget类
    QWidget类是所有窗口部件的基类,QDialog和QMainWindow等等都是QWidget的子类,可以嵌入到其他窗口里,也可以作为顶级窗口
4、创建界面
(1)自动创建
    在创建工程的时候,勾选了创建.ui界面的复选框之后,那么工程创建完成的同时也创建了一个界面
(2)手动创建
a、右击工程下的文件,选择add new...,添加C++class,选择基类(QDialog、QMainWindow、QWidget),但是没有选择ui界面的
b、右击工程下的文件,选择add new...,选择Qt,选择Qt设计师界面类,一般选择Dialog without Buttons,该形式创建的时候会创建ui界面
5、界面类的方法
(1)show():将界面显示出来,设置界面以非模态形式显示
(2)hide():将界面隐藏
(3)close():将界面关闭,释放了空间
(4)setWindowTitle(QString):设置界面的标题
(5)setFixedSize(int w , int h):设置窗口为固定大小
(6)resize(int w , int h):设置窗口的初始大小,后期可以更改窗口的大小
(7)setWindowIcon(const QIcon(QString &fileName));//设置窗口的图标
(8)exec():设置界面以模态的形式显示

//创建两个界面,两个界面中都有按钮,按下按钮打开另外一个界面同时关闭当前界面,实现界面的跳转功能

四、基本的窗口部件
1、QPushButton(按钮类)
(1)控件形式实现
****************属性******************
objectName:修改类的对象名
enabled:是否启用该按钮,如果是true,否则就是false
geometry:设置该类的几何属性
sizePolicy:设置该类的尺寸
minimumSize:设置该类的最小尺寸
maxmumSize:设置该类的最大尺寸
font:设置该类里的内容的文本的字体
cursor:设置鼠标定位到该控件的时候,鼠标显示的样式
toolTip:设置鼠标定位到该控件的时候,提示的文本信息
toolTipDuration:设置提示的文本的显示的时间
statusTip:设置文本提示的状态
styleSheet:设置该控件里的图片的样式为自适应

text:设置该控件里的文本的内容
icon:向该控件里设置图片
iconsize:设置图片的大小
shortcut:设置该控件的快捷键
checkable:设置该控件是否按下使能
checked:设置按钮初始化是否是按下
flat:是否隐藏该控件的背景,如果是true则隐藏,否则是false不隐藏
(2)纯源码方式实现
QPushButton(QWidget *parent = nullptr):可以带参可以不带参,不带参--不嵌入到其他窗口里,带参--可以嵌入到其他窗口里
QPushButton(const QString &text, QWidget *parent = nullptr):实例化时指定按钮里显示的文本
QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr):实例化时指定显示的图片和文本
setParent(QWidget *widget):设置该控件显示到哪个窗口里
    btn.setParent(this);//将按钮显示到当前界面里
    btn.setText("btn");//设置按钮里显示的文本
    btn.resize(50,50);//设置按钮的宽度和高度
    btn.setFixedSize(50,50);//设置按钮的固定的大小(宽度和高度)
    btn.setFixedWidth(50);//设置按钮固定的宽度
    btn.setFixedHeight(50);//设置按钮固定的高度
    btn.move(100,0);//设置按钮显示的位置
    btn.setFlat(false);//设置按钮的背景是否隐藏,true--隐藏 , false---不隐藏
    btn.setFont(QFont("宋体",16));//设置按钮里的文本的字体格式
    btn.setIcon(QIcon(":/image/re.jpg"));//设置按钮显示的图片
    btn.setIconSize(QSize(16,16));//设置图片的大小
    btn.adjustSize();//设置按钮里的内容自适应按钮的大小
    btn.setStyleSheet("border-image: url(:/image/re.jpg)");//设置按钮的图片的样式
    btn.setCursor(Qt::PointingHandCursor);//设置鼠标定位到按钮上显示的光标样式
    btn.setToolTip("这是btn");//设置鼠标定位到按钮上提示的文本
    btn.setGeometry(0,0,50,50);//设置按钮的几何位置,1,2参数表示坐标,3,4参数表示宽度和高度
    btn.setCheckable(true);//设置按钮是否按下使能
    btn.setChecked(true);//设置按钮的初始状态是按下
    btn.setShortcut(QKeySequence::Backspace);//设置按钮的快捷键
    btn.setEnabled(true);//设置按钮是否启用,true--启用,false--禁用
信号:
    clicked()/clicked(bool)/pressed()/released()/toggled(bool)
2、单选按钮(QRadioButton)
(1)控件形式实现
****************属性******************
objectName:修改类的对象名
enabled:是否启用该按钮,如果是true,否则就是false
geometry:设置该类的几何属性
sizePolicy:设置该类的尺寸
minimumSize:设置该类的最小尺寸
maxmumSize:设置该类的最大尺寸
font:设置该类里的内容的文本的字体
cursor:设置鼠标定位到该控件的时候,鼠标显示的样式
toolTip:设置鼠标定位到该控件的时候,提示的文本信息
toolTipDuration:设置提示的文本的显示的时间
statusTip:设置文本提示的状态
styleSheet:设置该控件里的图片的样式为自适应

text:设置该控件里的文本的内容
icon:向该控件里设置图片
iconsize:设置图片的大小
shortcut:设置该控件的快捷键
checkable:设置该控件是否按下使能
checked:设置按钮初始化是否是按下
(2)纯源码形式实现
setParent(QWidget *widget):设置该控件显示到哪个窗口里
    btn.setParent(this);//将按钮显示到当前界面里
    btn.setText("btn");//设置按钮里显示的文本
    btn.resize(50,50);//设置按钮的宽度和高度
    btn.setFixedSize(50,50);//设置按钮的固定的大小(宽度和高度)
    btn.setFixedWidth(50);//设置按钮固定的宽度
    btn.setFixedHeight(50);//设置按钮固定的高度
    btn.move(100,0);//设置按钮显示的位置
    btn.setFlat(false);//设置按钮的背景是否隐藏,true--隐藏 , false---不隐藏
    btn.setFont(QFont("宋体",16));//设置按钮里的文本的字体格式
    btn.setIcon(QIcon(":/image/re.jpg"));//设置按钮显示的图片
    btn.setIconSize(QSize(16,16));//设置图片的大小
    btn.adjustSize();//设置按钮里的内容自适应按钮的大小
    btn.setStyleSheet("border-image: url(:/image/re.jpg)");//设置按钮的图片的样式
    btn.setCursor(Qt::PointingHandCursor);//设置鼠标定位到按钮上显示的光标样式
    btn.setToolTip("这是btn");//设置鼠标定位到按钮上提示的文本
    btn.setGeometry(0,0,50,50);//设置按钮的几何位置,1,2参数表示坐标,3,4参数表示宽度和高度
    btn.setCheckable(true);//设置按钮是否按下使能
    btn.setChecked(true);//设置按钮的初始状态是按下
    btn.setShortcut(QKeySequence::Backspace);//设置按钮的快捷键
    btn.setEnabled(true);//设置按钮是否启用,true--启用,false--禁用

练习:
    用户按下第一次,输出老师很帅,按下第二次,输出老师很丑,循环进行...............
3、QLabel(标签)
(1)控件形式实现
****************属性******************
objectName:修改类的对象名
enabled:是否启用该按钮,如果是true,否则就是false
geometry:设置该类的几何属性
sizePolicy:设置该类的尺寸
minimumSize:设置该类的最小尺寸
maxmumSize:设置该类的最大尺寸
font:设置该类里的内容的文本的字体
cursor:设置鼠标定位到该控件的时候,鼠标显示的样式
toolTip:设置鼠标定位到该控件的时候,提示的文本信息
toolTipDuration:设置提示的文本的显示的时间
statusTip:设置文本提示的状态
styleSheet:设置该控件里的图片的样式为自适应

frameShape:设置标签的边框样式
frameShadow:设置标签边框的阴影
lineWidth:设置线宽
midLineWidth:设置中间线宽

text:设置标签里的文本
textFormat:设置文本格式---plainText:纯文本格式----RichText:富文本格式----AutoText:结合了plainText和RichText的特点
pixmap:设置标签显示的图片
scaledContents:设置图片自适应标签的大小
alignment:设置标签里的文本的对齐方式
wordWrap:设置标签里的文本自动换行
margin:设置标签里的文本据标签的距离(边距)
indent:设置标签里的文本的缩进
(2)纯源码方式实现
    label.setParent(this);//设置标签显示在当前的窗口里
    label.setNum(50);//设置标签里显示的数值
    label.setText("标签");//设置标签里的文本
    label.setIndent(20);//设置标签里的文本缩进为20
    label.setMargin(20);//设置标签里的文本据标签的边距(左、右、上、下)
    label.resize(50,50);//设置标签的大小
    label.setFixedSize(50,50);//设置标签的固定的大小
    label.setFixedWidth(50);//设置标签的固定的宽度
    label.setFixedHeight(50);//设置标签的固定的高度
    label.setPixmap(QPixmap(":/image/re.jpg"));//设置标签里显示的图片
    label.setWordWrap(true);//设置标签里的文本是否换行,true--换行,false--不换行
    label.setAlignment(Qt::AlignLeft);//设置标签里的文本的对齐方式
    label.setTextFormat(Qt::PlainText);//设置标签里的文本的格式
    label.setScaledContents(true);//设置标签里的图片是否自适应标签的大小,true---是自适应,false--不自适应
    label.setFont(QFont("宋体",20));//设置标签里的文本的字体格式
    label.text();//获取标签里的文本
    label.setStyleSheet("border-image: url(:/image/re.jpg)");//设置标签里的图片的样式
    label.setParent(this);
    label.resize(100,100);
    QMovie *movie = new QMovie(":/image/he.gif");//创建QMovie
    label.setMovie(movie);//向标签里设置动态图
    label.setScaledContents(true);
    movie->start();//设置动态图开始运行
    movie->setSpeed(800);//设置动态图的执行的快慢,200=1倍
    movie->setPaused(true);//暂停动态图的播放

4、复选框(QCheckBox)
(1)控件形式实现
****************属性******************
objectName:修改类的对象名
enabled:是否启用该按钮,如果是true,否则就是false
geometry:设置该类的几何属性
sizePolicy:设置该类的尺寸
minimumSize:设置该类的最小尺寸
maxmumSize:设置该类的最大尺寸
font:设置该类里的内容的文本的字体
cursor:设置鼠标定位到该控件的时候,鼠标显示的样式
toolTip:设置鼠标定位到该控件的时候,提示的文本信息
toolTipDuration:设置提示的文本的显示的时间
statusTip:设置文本提示的状态
styleSheet:设置该控件里的图片的样式为自适应

text:设置该控件里的文本的内容
icon:向该控件里设置图片
iconsize:设置图片的大小
shortcut:设置该控件的快捷键
checkable:设置该控件是否按下使能
checked:设置按钮初始化是否是按下

tristate:设置复选框的状态,true----表示复选框有三种状态 ,   false---表示复选框有两种状态
三种状态:
全选中状态、半选中状态、未选中状态

(2)纯源码方式实现
信号:void stateChanged(int state)//只要复选框的状态改变就会触发该信号
    checkBox.setParent(this);//设置复选框显示在哪个窗口里
    checkBox.setText("复选框");//设置复选框显示的文本
    checkBox.resize(80,30);//设置复选框的大小
    checkBox.setTristate(true);//设置复选框的状态,true----三种状态 ,  false----两种状态
    checkBox.setCheckState(Qt::Checked);//设置复选框的初始状态
    checkBox.setIcon(QIcon("图片的资源路径"));//设置复选框里显示的图片
    checkBox.setIconSize(QSize(10,10));//设置图片的大小
    Qt::CheckState state=checkBox.checkState();//获取复选框的状态
    if(state==Qt::Unchecked)//value=0
    {
        qDebug()<<"复选框是未选中状态"<<endl;
    }
    else if(state==Qt::PartiallyChecked)
    {
        qDebug()<<"复选框是半选中状态"<<endl;
    }
    else if(state==Qt::Checked)
    {
        qDebug()<<"复选框是全选中状态"<<endl;
    }
    connect(&checkBox,SIGNAL(stateChanged(int)),this,SLOT(display(int)));

5、行编辑框(QLineEdit)
(1)控件形式实现
****************属性******************
objectName:修改类的对象名
enabled:是否启用该按钮,如果是true,否则就是false
geometry:设置该类的几何属性
sizePolicy:设置该类的尺寸
minimumSize:设置该类的最小尺寸
maxmumSize:设置该类的最大尺寸
font:设置该类里的内容的文本的字体
cursor:设置鼠标定位到该控件的时候,鼠标显示的样式
toolTip:设置鼠标定位到该控件的时候,提示的文本信息
toolTipDuration:设置提示的文本的显示的时间
statusTip:设置文本提示的状态
styleSheet:设置该控件里的图片的样式为自适应

inputMask:指定用户输入的内容
text:设置行编辑框显示的文本
maxLength:设置行编辑框输入的字符最大长度
frame:设置行编辑框是否有边框:true--有 , false--没有
echoMode:设置行编辑框里的内容的可见程度,Normal--任何时候该控件里的文本都是可见的,NoEcho----输入文本的时候文本的内容是不可见的,Password----表示输入文本的时候,文本内容是不可见的,PasswordEchoOnEdit----文本编辑的时候文本内容是可见的,文本不编辑的时候,文本内容不可见
cursorPosition:光标的位置
alignment࿱

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值