QT的学习

QT是利用C++进行编写,而QT则是C++的实际运用的一种方式。

QT也称GUI------grphical user interface(图形用户接口

        通过图形的方式操纵计算机用户界面
   QT的特点以及应用:

1、跨平台(可以在多个平台上进操作(windows、linux))

2、面向对象(QT里封装的机制非常完善。编程方式和C++一样

3、丰富的API(数据库(sqlite、mysql等等)、网络编程(network:UDP、TCP)、3D绘图、3D渲染、文件I/O等等

1、信号与槽机制(重点)

实现两个对象之间的通信的机制,让两个对象可以进行通信

函数:connect     作用:绑定两个对象,使两对象可以正常进行通信,反之,则不能通信

connect函数的形式:
    connect(对象1 ,对象1发出的信号 , 对象2 ,对对象1发出的信号进行处理)

对象1:是类1的实例化---对象1
对象2:是类2的实例化---对象2
对象1发出的信号:函数,该函数可以携带信息--------信号函数
对对象1发出的信号进行处理 :函数,可以对信号携带信息进行处理  -----槽函数

简单的理解就是对象1触发信号后对象2就运行槽函数(收到信号干事)

什么是信号(信号函数)?

        信号可以称为触发,如去朋友家,你需要告诉它到了,它才来开门,这个告诉它就是信号。而我们的信号函数则都只能进行声明,是不允许实现或者定义的。如果你在那个类里要一个信号函数,那么就在那个类的.h文件中在关键字 signals:下进行声明。

2d7abd2d6ae74d69a8f94628fd27708a.png

 而且信号函数允许带参数,但信号函数的参数必须大于槽函数参数,返回类型是void类型。

什么是槽函数?

        槽函数既在收到信号函数发送的信号后,开始执行需要的程序。也可以这样理解,就是你把要做的事情准备好,接到这个信号过后才开始执行。而我们的槽函数则声明在关键字slots下,当然槽函数遵从继承的三种情况。槽函数与信号函数的区别在于既要声明函数也要实现函数。而且槽函数也可以带参数,但比信号函数参数少,槽函数的返回值类型也是void类型。

c299172dac79482986af9de1feaba44a.pngb2f9c29c2c534e1f91a842fcb3676b17.png

 2a821710d64b4479a2a8e833b0362d91.png

         这就是一个源代码进行敲写的,从上面的最后一张图可以看出,connect在第一次使用时,它的前后都是信号,其实这种情况就是第一个信号触发第二个信号,第二个信号也就触发了,它在触发槽函数。

而进行编写QT程序则拥有两种方式; 源代码敲写(全部敲写)图像化编程(部分功能敲写)

下面来讲解哈,QT可以创建那些界面;

1、QDialog类

        提供了一个简单的对话框,一般作为顶级窗口(窗口的最外层),其他窗口部件可以嵌入到该对话框里,该对话框不会嵌入到其他窗口里。对话框拥有两种状态:模态对话框和非模态对话框

模态对话框:使用模态对话框则会发生程序阻塞,只有关闭该对话框的时候,程序才会继续执行,模态对话框通过调用exec()函数来实现。

非模态对话框:以非模态的形式出现,后面的程序就不会阻塞在这里,非模态对话框一般是通过调用show()函数来实现

2、QMainWindow类

        该类提供了菜单栏、工具栏、状态栏、工作区(浮动、漂浮、悬空等)等功能,一般也是不会嵌入到其他窗口里,通常作为顶级窗口。

3、QWidget类

        QWidget类是所有窗口部件的基类,QDialog和QMainWindow等等都是QWidget的子类,可以嵌入到其他窗口里,也可以作为顶级窗口。

以下是一些在界面时用到的函数

(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();设置界面以模态的形式显示

2、基本的窗口部件

        在记录这些基础的窗口部件时,在制作这些时分为两种方式进行编程,但无论是哪种方式,其实都是一样的,一个时底层开发一个是应用层开发的感觉,因为源码就是我们图形编程所选择的那些。还有就是这些基础的窗口部件都是继承QWidget类的,所有这个属性框里的内容差不多。而我们实际需要修改的是格窗口部件属性,根据自己的需求进行修改。

        如果在学习的阶段,自己弄不懂什么可以采用QT软件所带来的帮助进行,需要用到哪一个,就点击帮助,在帮助里面找到选择索引模式,就可以进行搜索了,那个不懂就直接搜他如QPushButton,就直接可以了,里面包含了这个窗口部件的所有信息。

9019cce566f847cf84386c7fe9ac115e.png 

2.1、普通按钮(QPushButton)

        这种就是最普通的按钮,只要按下就会变化,它的状态也就只有按下和没按下两种状态。一般当按下的时候会产生信号。

 5073c6e6b4384a7d9c6a75597485d478.png

         如果使用图形化界面进行编写,则只需要修改右下角的黄生上下的QObject、QWidget、QDialog三个就可以实现了。

里面大部分时英文,大致翻译操作如下:

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

text:设置该控件里的文本的内容
icon:向该控件里设置图片
iconsize:设置图片的大小
shortcut:设置该控件的快捷键
checkable:设置该控件是否按下使能
checked:设置按钮初始化是否是按下
flat:是否隐藏该控件的背景,如果是true则隐藏,否则是false不隐藏

配置好这些之后,如何进行操作呢?只需要点中对话框,然后右击出现很多选项,此时选择转换为槽,既槽函数,然后会有以下的界面

8ca986c153d24d428a1f4af861574944.png

在这个界面里需要我们选择那种触发方式,其详细的解释如下:

clicked():点击信号
pressed():鼠标按下
released():鼠标按下并释放
toggled():按钮按下再释放,释放再按下

选择好方式后,点OK后会直接转到源程序当中,只需要进行编写需要处理的事情就可以了,大大节省开发时间。其实源码也是配置这些需要收到手动去更改的这些

当然也可以选择进行源码的开发:

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--禁用

        两种方法运行的效果都是一样的,只不过源码的方式比较需要很多配置。如果还知道更多的知识就去帮助里面查找信息。

2.2、单选按钮(QRadioButton)

        什么叫做单选按钮呢,就是可以有两种的选择,就是选择与不选择,就像填写我们的问卷调查,需要点那个一样,它的格式则如下所示:

1b7552c6b6674963a4afddd5882c65ea.png

当然也是分图形编程和源码编程的,这个一样可以进行选择开发。不过它的属性设置和上面叛徒按钮一模一样所以就不解释了。 

2.3、标签(QLabel)

主要的作用就是用来做标记的,就像一个东西需要名字一样。这个的作用就是用于做标记的

应为许多的都是继承与QDialog,只需要修改它本身的内容就行也就是QLabel下的属性。

c80f715b284a421f8727cb50458608a9.png

 一般没有其他功能,就只是做一个显示给别人看的。

它的属性有:

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

text:设置标签里的文本
textFormat:设置文本格式---plainText:纯文本格式----RichText:富文本格式----AutoText:结合了plainText和RichText的特点
pixmap:设置标签显示的图片
scaledContents:设置图片自适应标签的大小
alignment:设置标签里的文本的对齐方式
wordWrap:设置标签里的文本自动换行
margin:设置标签里的文本据标签的距离(边距)
indent:设置标签里的文本的缩进

2.4、复选框(QCheckBox)

复选框也就是前面有一个正方形的框,具有三种状态或者两者状态的选择

fa2c0bf9dbab4a41adc30c0eec7cea58.png        而复选框最大的优点就是他可以触发两者状态或者三种状态,选两者还是三种都是选中我们拖出来的这个复选框。在右下角的QCheckBox属性中,将tristate打勾就是两者状态,默认就是三种状态。

三种状态:全选中状态、半选中状态、未选中状态

两种状态:全选中状态、未选择状态

 如果是需要源码的开发,则需要进行以下的操作:

信号: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)));

2.5、行编辑框(QLineEdit)

        行编辑框主要是用于输入信息用的,相当于是一个输入框,既上面显示你输入的信息,而且可以选择内容可见以及内容不可见。

23daa153783543da9b325da03c7531fb.png

 剩余的开发与上面几种一样,所有省略

源码开发:

    lineEdit.setParent(this);//设置行编辑框显示在当前界面
    lineEdit.resize(100,40);//设置行编辑框的大小
    lineEdit.setPlaceholderText("请输入账号");//设置行编辑框提示的内容
    lineEdit.setFrame(true);//设置行编辑框的边框,true---有边框 , false---无边框
    lineEdit.selectAll();//选择行编辑框里的所有内容
    lineEdit.setText("123456");//设置行编辑框里显示的文本
    lineEdit.setReadOnly(true);//设置行编辑框是否是可读的,true--表示可读,  false--不可读
    lineEdit.setEchoMode(QLineEdit::Normal);//设置行编辑框里的文本的可见形式
    lineEdit.setMaxLength(10);//设置行编辑框里输入的文本的字符最大长度
    lineEdit.setAlignment(Qt::AlignLeft);//设置行编辑框里的文本的对齐方式
    lineEdit.text();//获取行编辑框里的文本的内容
    QLineEdit::EchoMode mode=lineEdit.echoMode();//获取行编辑框里的文本显示的形式
    if(mode==QLineEdit::Normal)
    {

    }
    else if(mode==QLineEdit::NoEcho)
    {

    }
    else if(mode==QLineEdit::Password)
    {

    }
    else if(mode==QLineEdit::PasswordEchoOnEdit)
    {

    }
    lineEdit.clear();//清空行编辑框里的内容
    connect(&lineEdit,SIGNAL(textChanged(const QString &)),this,SLOT(display(const QString &)));

2.6、单精度自旋框(QSpinBox)

        单精度自旋框就是可以显示可调的整型的数字,可以为数字前面加上前缀以及数字后面加上后缀。但是当调节的时候就是数字在动。

87ecce60edb148dbb60385d53a827b56.png

其余的也就是差不多,下面的是源码开发的:

spinBox.setParent(this);//设置自旋框显示在当前的界面内
spinBox.resize(100,30);//设置自旋框的大小
spinBox.setRange(1,100);//设置自旋框调节的范围
spinBox.setValue(50);//设置自旋框的初始化值
spinBox.setPrefix("房屋:");//设置自旋框的里的数值的前缀
spinBox.setSuffix("万元");//设置自旋框里的数值的后缀
spinBox.setMaximum(100);//设置自旋框里的数值的最大值
spinBox.setMinimum(1);//设置自旋框里的数值的最小值
spinBox.setSingleStep(5);//设置自旋框里的数值的单步值
spinBox.setDisplayIntegerBase(10);//设置自旋框里的数值的基数
spinBox.setStepType(QAbstractSpinBox::DefaultStepType);//设置步进值的类型
spinBox.setFont(QFont("宋体",12));//设置自旋框里的数值的字体类型
int a=spinBox.value();//获取自旋框里的数值
QString pre=spinBox.prefix();//获取自旋框里的内容前缀
QString suf=spinBox.suffix();//获取自旋框里的内容的后缀
int max=spinBox.maximum();//获取自旋框里的数值的最大值
int min=spinBox.minimum();//获取自旋框里的数值的最小值
connect(&spinBox,SIGNAL(valueChanged(int)),this,SLOT(display(int)));
connect(&spinBox,SIGNAL(valueChanged(const QString &)),this,SLOT(display2(const QString&)));

2.7、双精度自旋框(QDoubleSpinBox)

双精度也就是可以设置显示整数后多少位,其他都和单精度是一样的。

3d09c4a38db2459e90097bdd8f778cef.png

2.8、组合框(QComboBox)

组合框就是有一个三角符号那种,点一下就可以进行选项,或者查看。

ce635f0635b04a0da540d84aea878b57.png

源码开发:(不懂就帮助索引进行详细的查找)

comboBox.setParent(this);//设置组合框显示在当前界面内
    comboBox.setFixedSize(100,30);//设置组合框的固定的大小
    comboBox.setFrame(true);//设置组合框的边框
    comboBox.addItem("星期一");//向组合框里添加列表项
    comboBox.addItem("星期二");//向组合框里添加列表项
    comboBox.setEditable(true);//设置组合框是否是可编辑的,true--可编辑 ,  false--不可编辑
    comboBox.setItemText(0,"星期三");//向组合框指定的位置插入列表项
    QStringList list;
    list<<"星期三"<<"星期四"<<"星期五";
    comboBox.addItems(list);//向组合框里添加列表项列表
    comboBox.clear();//情况组合框里的内容
    int a=comboBox.currentIndex();//获取组合框里当前列表项的索引值
    qDebug()<<"value:"<<a<<endl;
    QString text=comboBox.currentText();//获取组合框当前列表项
    qDebug()<<text<<endl;
    int sum=comboBox.count();//获取组合框里的列表项的数量
    qDebug()<<"总数:"<<sum<<endl;
    QString text1=comboBox.itemText(0);//获取组合框里指定的下标对应的列表项
    qDebug()<<text1<<endl;
    connect(&comboBox,SIGNAL(currentTextChanged(const QString &)),this,SLOT(display(const QString &)));
    connect(&comboBox,SIGNAL(currentIndexChanged(int )),this,SLOT(display1(int)));

2.9、分组框(QGroupBox)

 

 

d65f47622d70423c97073e5c82c8eb9a.png

源码开发:

groupBox.setParent(this);//设置分组框显示在当前界面
    groupBox.resize(100,100);//设置分组框的大小
    groupBox.setFlat(true);//设置边框是否隐藏,true--隐藏,false--不隐藏
    groupBox.setTitle("分组框");//设置分组框的标题
    groupBox.setAlignment(Qt::AlignLeft);//设置分组框标题的对齐方式
    groupBox.setCheckable(true);//设置分组框前是否有复选框,true--有, false--没有
    groupBox.setChecked(true);//设置分组框是否是选中状态,true--选中,false--未选中
    if(groupBox.isFlat())
    {
        //判断分组框的边框是否是隐藏
    }
    if(groupBox.isChecked())
    {
        //判断分组框是否是被选中
    }
    groupBox.title();//获取分组框的标题
    connect(&groupBox,SIGNAL(clicked()),this,SLOT(display()));

2.10、滑动条(QSlider)

        滑动条 其实就是一个音量调节键,通过调节他,他会返回一个当前的值,这个值是在你定的范围内,也可以设置每次滑动的大小。

09918750fe3947118d7911d3dbeacd05.png

源码开发:

    slider.setParent(this);//指定滑动条显示在当前的界面
    slider.resize(100,30);//设置滑动条的大小
    slider.setMaximum(100);//设置滑动条的最大值
    slider.setMinimum(1);//设置滑动条的最小值
    slider.setRange(1,100);//设置滑动条的范围
    slider.setValue(50);//设置滑动条的当前值
    slider.setTickPosition(QSlider::TicksAbove);//设置滑动条的刻度的位置
    slider.setTickInterval(10);//设置滑动条的刻度
    slider.setSingleStep(1);//设置滑动条的步进值(单步值)
    slider.setOrientation(Qt::Horizontal);//设置滑动条摆放的位置
    int a=slider.tickInterval();//获取滑动条的刻度值
    QSlider::TickPosition position=slider.tickPosition();//获取滑动条的位置
    connect(&slider,SIGNAL(sliderMoved(int )),this,SLOT(display(int)));

2.11、进度条(QProgressBar)

进度条就是向一个加载界面,加载了多少。

cdec54628f9246bdbddb352c31b63874.png

 源码开发:

    progressBar.setParent(this);//设置进度条显示在当前界面内
    progressBar.resize(120,30);//设置进度条的大小
    progressBar.setMaximum(100);//设置进度条加载最大值
    progressBar.setMinimum(1);//设置进度条加载的最小值
    progressBar.setRange(1,100);//设置进度条加载的范围
    progressBar.setValue(50);//设置进度条当前值
    progressBar.setFormat("%p%");//设置进度条的值的格式
    progressBar.setAlignment(Qt::AlignLeft);//设置进度条的文本对齐方式
    progressBar.setOrientation(Qt::Horizontal);//设置进度条摆放的位置
    progressBar.setTextVisible(true);//设置进度条的值是否可见,true--可见,false--不可见
    int a=progressBar.value();//获取进度条的值
    progressBar.text();//获取进度条的文本
    connect(&progressBar,SIGNAL(valueChanged(int )),this,SLOT(display(int)));//当进度条的值改变的时候会触发valueChanged(int )信号

2.12、滚动条(QScrollBar)

滚动条只是与滑动条不一样而已,但是功能却是差不多的。

dc5d87af715d48dcb690eaede95250ea.png

 源码开发:

    scrollBar.setParent(this);//设置滚动条显示在当前界面
    scrollBar.setFixedSize(20,100);//设置滚动条的大小
    scrollBar.setRange(0,100);//设置滚动条的范围
    scrollBar.setMaximum(100);//设置滚动条的最大值
    scrollBar.setMinimum(0);//设置滚动条的最小值
    scrollBar.setValue(50);//设置滚动条的当前值,初始位置
    scrollBar.setSingleStep(1);//设置滚动条的步进值
    scrollBar.setOrientation(Qt::Vertical);//设置滚动条的摆放的位置
    connect(&scrollBar,SIGNAL(valueChanged(int )),this,SLOT(display(int )));

2.13、列表部件框(QListWidget)

列表部件框可以在里面增加内容,这些内容就像我们在wps的word文档里写东西一样。

ef8a00f861a34d52bbb724744444affd.png

 源码开发:

    listWidget.setParent(this);//设置列表部件框显示在当前界面
    listWidget.resize(150,150);//设置列表部件框的大小
    listWidget.clear();//清空列表部件框里的内容
    listWidget.addItem("星期一");//向部件框里增加列表项
    QStringList list;
    list<<"星期二"<<"星期三"<<"星期四";
    listWidget.addItems(list);
    listWidget.takeItem(0);//获取部件框里的列表项
    listWidget.count();//获取部件框里的列表项的数目
    listWidget.insertItem(1,"星期天");//向部件框里的指定的位置插入列表项
    QListWidgetItem *item=new QListWidgetItem;
    listWidget.setCurrentItem(item);

这些窗口部件,无论是图形设置还是源码编写,都是其属性一样,不懂就去帮助里面查找其信息。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

啵啵520520

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

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

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

打赏作者

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

抵扣说明:

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

余额充值