QT Creator
一门图形界面开发框架------专注于界面的开发
例如:
手机界面
电脑桌面
其他界面
.....
学习方法:
(1)英语阅读能力要好一点
QT将一些类和方法进行了封装,一般是采用英语(方法名、属性、子类、父类等等)进行介绍
(2)学习QT reator
1)多查帮助
2)从类的架构要清晰(有哪些类)---了解类(父类、子类)里的有哪些方法(有什么作用等等)----了解方法的返回值、参数等等
GUI,graphical user interface,图形用户接口,是指将用户在计算机中相关的操作以图形方式进行体现,即用户只需要操作图形界面,就能实现相关的功能
例如:
用户双击电脑界面上的文件夹图标,就能实现打开文件夹的功能
如果无GUI,实现打开文件夹的功能?纯代码方式实现
一、QT的基本介绍
1、发展
1998年,奇趣科技发展有限公司,研究界面的开发,QT Creator发展出来,功能不怎么完善、跨平台能力比较弱等等
2008年,被诺基亚公司收购,手机开发,使用debian系统实现的手机界面,实现起来比较困难,在一段时间内用QT。
2012年,芬兰的digia科技发展公司收购,功能就逐渐被完善、跨平台能力也是比较强(桌面应用、移动应用等等)
2、特点
跨平台能力比较强
windows、linux、macos、BSD等等
封装机制比较丰富(具有完善的面向对象机制)
QT对类进行了封装,界面类、窗口类、图形类(2D、3D等)、网络通信类、数据库类等等
简单易学易上手
....
3、应用
汽车的仪表盘
剪辑软件
股票的系统
游戏:植物大战僵尸、扫雷、字牌、极品飞车等等
记事本
WPS
google地图等等
.........
总结:有界面都可以用QT实现
二、第一个QT 应用程序
MaintenanceTool.exe:用于更新或者卸载相关的组件
窗口类:
QMainwindow
QDialog
QWidget
mydialog.ui //界面文件
群里:图片
三、信号与槽机制(重点,但不是难点)
机制:
是一种两个对象之间的通信的机制
例如:
鼠标双击-------文件夹图标---------打开文件夹功能
通信的过程:
用户对象
文件夹图标对象
鼠标双击,相当于告诉文件夹(即给文件夹一个信号),我现在想要打开你
文件收到信号,就执行打开文件夹的功能
信号:在QT中信号用函数来进行体现
槽:在QT中槽也是用函数来进行体现
实现两个对象之间的通信:
提前将两个对象进行绑定(类似于成为你的QQ好友)
QT中提供了绑定的函数(方法):
函数原型:
connect(对象1,对象1发出的信号,对象2,处理对象1发出的信号);//来自于QObject
connect(对象1,SIGNAL(信号),对象2,SLOT(槽));
对象1:是一个类的实例化,信号的发出者
对象2:是一个类的实例化,信号的接收者
对象1发出的信号:信号,实质上是一个函数,信号是对象1中的函数,信号使用SIGNAL函数包含
处理对象1发出的信号:槽,实质上也是一个函数,槽是对象2中的函数,槽使用SLOT函数包含
QObject中的原型:
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
注:
(1)connect函数不仅可以绑定一个信号和槽,也能绑定两个信号
(2)多个信号可以绑定同一个槽函数,先绑定先执行,后绑定后执行
(3)一个信号可以绑定多个槽函数
(4)绑定时SIGNAL、SLOT中信号和槽只需要写参数类型,不需要形参名
例子:
车上的司机,看见红灯亮了之后,车就停下,人过马路
对象1:车
信号:车看见红灯亮了,停下
对象2:人
槽:人就可以过马路
绑定:使用connect函数绑定车和人两个对象
1、自定义信号与槽(需要用户手动的进行触发)
信号:在类中需要放置在关键字signals下
例如:
signals:
信号1;
信号2;
......
注意事项:
(1)信号只需要声明,不需要实现
(2)信号的返回值类型是void类型
(3)信号也是可以发生重载
(4)信号的参数个数必须大于等于槽函数的参数个数
槽:在类中需要放置在关键字slots下
例如:
slots:
槽1;
槽2;
....
注:
(1)slots前可以加上修饰符:public、protected、private(与C++中修饰符的作用一致)
(2)槽函数既需要声明,也需要实现
(3)槽函数的返回值类型一般也是设置为void类型
(4)当槽函数的参数与信号的参数一致时,需要满足槽函数的参数类型和信号的参数类型保持一致
信号的触发:
使用emit关键字对信号进行触发
格式:
emit 信号;//将信号给发送出去
练习1:
元旦节快到了,老师给大家发送红包,老师给张三发送红包,老师先将红包给李四,让李四把红包给张三,张三收到了红包之后对老师表示感谢
对象1:老师
对象2:李四
对象3:张三
练习2:
小张培训完了之后,去干开发的工作,老板给张三100块钱,让张三去给老板买水,张三收到了100块之后,由于人情世故,张三可以选择不要100块,也可以选择要100块去给老板买水
2、自动绑定的信号与槽
用户只需要选择相应的信号--------执行转到槽操作---------QT自动完成绑定的过程
以按钮为例:
按钮中的信号:
clicked()//点击按钮时出发该信号
clicked(bool)
pressed()//按下按钮时出发该信号
released()//按下按钮并释放按钮时出发该信号
toggled(bool)//按钮的状态取反时出发该信号
练习:
(1)使用自动绑定信号与槽(用按钮),实现奇偶数的交替打印
(2)使用按钮点击发送数据,点击按钮时将数据发送给Teacher类,Teacher类再将数据发送给Student类,实现数据的传递
(3)现有四个类,分别是按钮类、People1、People2、People3
用户点击按钮类,将发射整形数据给People1和People3类
如果整形数据是1,则给People1类,如果整形数据是2,则给People3类
其中如果是整形数据1,则发送给People1类的时候,也需要让People2告诉People3不用进行接收;如果是整形数据2,则需要让People2告诉People3进行接收并输出收到的数据
QT中解绑两个对象的绑定:
函数原型:
bool disconnect(对象1,对象1发出的信号,对象2,对对象1发出的信号进行处理);//解绑对象1和对象2绑定的信号和槽
解绑1:
disconnect(对象1,对象1的信号,对象2,对象2的槽);
解绑指定的两个对象中的指定的信号和槽
解绑2:
disconnect(对象1,对象1的信号,对象2,nullptr);
解绑对象1中的信号和对象2中的所有(任何)槽函数
解绑3:
disconnect(对象1,对象1的信号,nullptr,nullptr);
解绑对象1中的信号和其它所有对象的槽函数的绑定
解绑4:
disconnect(对象1,nullptr,nullptr,nullptr);
解绑指定的对象1中的任何信号和其它任何对象的槽的绑定
四、界面
QT提供了三个界面:QMainWindow、QWidget、QDialog
1、QMainWindow
称为“主界面”,该界面一般是作为顶层窗口使用,该界面包含了菜单栏、工具栏、状态栏以及工作区等信息
2、QWidget
所有可视化窗口的父类,QMainWindow、QDialog、QPushButton等等的父类都是QWidget,一般QWidget既可以作为顶层窗口使用,也可以嵌入到其它窗口中
3、QDialog
基于简单对话框的窗口,不具备菜单栏、工具栏、状态栏以及工作区等功能,一般是作为顶层窗口使用
创建QDialog界面:
(1)创建项目时就已经创建了一个界面
(2)自己创建界面
选择工程文件夹右击----添加新文件----Qt-----QT设计师界面类----Dialog Without Buttons
方法:
show();//将界面显示出来,以非模态形式进行显示
hide();//将界面进行隐藏
close(); //将界面进行关闭
void resize(const QSize &size); //后期可以再对界面的大小进行放缩
void resize(int w, int h);//设置界面的大小
void setFixedSize(const QSize &size); //设置界面的固定大小,后期不允许更改界面的大小
void setFixedSize(int w, int h);//设置界面的大小
void setWindowTitle(const QString &obj); //设置窗口的标题,QString QT中提供的强大关于字符串处理的类
void setWindowIcon(const QIcon &icon);//设置界面的LOGO
void setSizeGripEnabled(bool); //设置窗口右下脚是否有斜三角网格图标
bool isSizeGripEnabled() const ;//可以返回右下角是否有斜三角图标,如果有返回true,如果没有,返回false
void setResult(int i) ; //设置界面的返回值
int result() const ; //获取界面的返回值
void setModal(bool modal) ;//设置对话框的模式,结合show方法一起使用
void exec(); //设置对话框以模态形式显示
QString windowTitle() const //获取窗口的标题
UI界面属性:
objectName:对象名
enabled:设置是否启用界面的操作
geometry:设置界面的几何特性
信号:
void windowIconChanged(const QIcon &icon)//当LOGO变化时,触发该信号
void windowTitleChanged(const QString &title)//当标题变化时,触发该信号
对话框的模式分类:
模态对话框和非模态对话框
模态对话框:也称为阻塞对话框,是指当前界面是以模态形式显示,如果当前界面没有被关闭,那么后序界面就不能进行相关的操作,模态一般采用exec()方法进行显示
非模态对话框:也称为非阻塞对话框,是指当前界面是以非模态形式显示,如果当前界面没有被关闭,那么后序界面就能进行相关的操作,一般使用show()方法进行显示
//练习:
创建两个界面,两个界面中各有一个按钮,点击其中一个界面中的按钮,能实现打开另外一个界面并且关闭当前界面(实现界面的切换)
五、常用的基本控件
1、按钮类:QPushButton/QRadioButton
第一种:源码实现(实例化按钮类)
QPushButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr) //参数1传递图片,参数2传递文本,参数3指定父对象
QPushButton(const QString &text, QWidget *parent = nullptr)//参数1传递文本,参数2指定父对象
QPushButton(QWidget *parent = nullptr) //指定父对象
//设置父对象
btn->setParent(this);
//设置按钮显示的文本
btn->setText("登录");
//设置按钮的大小
btn->resize(QSize(50,20));
//移动按钮
btn->move(100,0);
//设置按钮的几何属性
btn->setGeometry(100,100,100,30);
//设置是否禁用按钮
btn->setEnabled(true);//false:禁用 true:启用(默认)
//设置按钮中的图标
btn->setIcon(QIcon(":/img/photo.jpg"));
//设置按钮背景是否隐藏
btn->setFlat(false);//true:隐藏 false:不隐藏(默认)
//设置鼠标定位到按钮上提示的文本
btn->setToolTip("这是按钮");
//设置按钮是否具有选中使能
btn->setCheckable(true);//true:使能(默认) false:失能
btn->setChecked(true);//true:选中(默认) false:未选中
//设置按钮是否具备快捷键
btn->setShortcutEnabled(0,true);
//设置按钮的快捷键
btn->setShortcut(QKeySequence::Backspace);
//获取快捷键
QKeySequence key=btn->shortcut();
//设置是否是回车键作为快捷键
btn->setAutoDefault(true);//true:回车键有效(默认) false:无效
//获取按钮的文本
QString text=btn->text();//获取按钮中的文本
//判断背景是否是隐藏
bool flag= btn->isFlat();
//设置按钮的字体
btn->setFont(QFont("宋体",30));
//设置光标
btn->setCursor(Qt::PointingHandCursor);
connect(this->btn,SIGNAL(clicked()),this,SLOT(print()));
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(print()));
信号:
void clicked(bool checked = false)
void pressed()
void released()
void toggled(bool checked)
第二种:ui界面实现(拖控件放到ui界面)
text:设置按钮的文本
icon:设置图片
iconsize:设置图片的大小
shortcut:设置快捷键
checkable:设置是否选中使能
chekced:设置是否选中
autoDefaoult:设置回车键是否有效
defalut:设置默认按钮
flat:设置按钮的背景是否隐藏
第三种:采用继承QPushbutton方式
class MyButton : public QPushButton
{
Q_OBJECT
public:
explicit MyButton(QWidget *parent = nullptr);
signals:
void send_Data(int a);
};
练习:
设计一个计算器,计算0-9的加减乘除运算,并将结果进行输出(必须纯代码实现)
2、标签类:QLabel
用于提示作用,也可以显示视频、图像、文本等等
源码:
QLabel(const QString &text, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
QLabel(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags())
//设置标签的文本
this->label->setText("鲜肉:");
//设置标签的大小
this->label->resize(150,150);
//移动标签的位置
this->label->move(100,0);
//设置标签的字体
//this->label->setFont(QFont("黑体",15));
//设置标签显示的数字(浮点型和整型)
this->label->setNum(10.5);
//获取标签显示的文本
QString text=this->label->text();
qDebug()<<"获取的数据:"<<text<<endl;
//设置标签中的内容的缩进
// this->label->setIndent(5);
//设置标签中的文本对齐方式
//this->label->setAlignment(Qt::AlignLeft);//文本对齐方式为右对齐
//获取文本的对齐方式
Qt::Alignment flag=this->label->alignment();
//设置标签换行
this->label->setText("hfohfsofhi ofhsiofhosif");//低版本
this->label->setWordWrap(true);//true:换行 false:不换行
//设置标签显示的图片
// this->label->setPixmap(QPixmap(":/img/photo1.jpg"));
//设置图片自适应标签的大小
this->label->setScaledContents(true);//true:自适应 false:不适应
//设置文本格式
this->label->setTextFormat(Qt::AutoText);
//设置边距
this->label->setMargin(1);//上下左右边距
//显示gif(动画)图
QMovie *moive=new QMovie(":/img/photo2.gif");
this->label->setMovie(moive);
moive->setSpeed(600);//加速播放
moive->start();//启动播放动画
//停止,暂停
// moive->stop();
// moive->setPaused(true);
练习:使用gif模拟视频播放器
能控制开始播放
能控制停止播放
能调节播放的速度
选择gif图进行播放
.....
UI:
frameShape:设置标签的边框样式
frameShadow:设置边框阴影
lineWidth:设置边框的宽度
midLineWidth:设置线的宽度
text:设置文本
textFormat:设置文本格式
pixMap:设置标签中的图像
sclaedContents:设置自适应
alignment:设置对齐方式
wordWrap:设置是否换行
margin:设置文本内容据边框的边距
indent:设置缩进
openExternLinks:放置外部链接
继承:
3、行编辑(输入)框:QLineEdit
代码:
QLineEdit(QWidget *parent = nullptr)
QLineEdit(const QString &contents, QWidget *parent = nullptr)//第一个参数设置显示的文本
//设置行编辑框的大小
this->lineEdit->resize(100,40);
//设置行编辑框的位置
this->lineEdit->move(0,0);
//设置行编辑框背景提示的文本
this->lineEdit->setPlaceholderText("请输入账号");
//设置行编辑框最大输入的字符数
this->lineEdit->setMaxLength(5);
//设置行编辑框的文本可见模式
this->lineEdit->setEchoMode(QLineEdit::Normal);
//获取文本的可见模式
QLineEdit::EchoMode mode=this->lineEdit->echoMode();
if(mode==QLineEdit::Normal)
{
qDebug()<<"正常模式"<<endl;
}
//清空行编辑框
this->lineEdit->clear();
//设置文本提示的内容
//this->lineEdit->setText("请输入密码");
//获取行编辑框里的内容
QString text=this->lineEdit->text();
//设置行编辑框是否是只读
//this->lineEdit->setReadOnly(true);//true:只读 false:不只读
//获取行编辑框最大能输入的字符数
int length=this->lineEdit->maxLength();
connect(this->lineEdit,SIGNAL(cursorPositionChanged(int,int)),this,SLOT(receive_Cursor_Change(int,int)));
connect(this->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(receive_Text_Changed(QString)));
QLineEdit::Normal0Display characters as they are entered. This is the default. //正常
QLineEdit::NoEcho1Do not display anything. This may be appropriate for passwords where even the length of the password should be kept secret. //输入时不可见
QLineEdit::Password2Display platform-dependent password mask characters instead of the characters actually entered.//输入时密码模式
QLineEdit::PasswordEchoOnEdit3Display characters as they are entered while editing otherwise display characters as with Password.//输入时正常,输入完不可见
信号:
void cursorPositionChanged(int oldPos, int newPos) //当光标位置,改变时触发该信号,将光标新的位置和就的位置进行返回
void editingFinished() //编辑完成时触发该信号
void inputRejected() //输入被拒绝时触发信号
void returnPressed() //返回按钮按下时信号
void selectionChanged() //文本选择变化时触发该信号
void textChanged(const QString &text) //文本变化时触发该信号
void textEdited(const QString &text) //文本编辑时触发该信号
UI:
参考:
练习
练习:
模拟QQ注册与登录界面
实现功能:
(1)实现注册/登录界面,登陆成功之后进入使用计算器界面(实现界面的跳转)
(2)用户能进行注册账户(支持注册多个账户)
(3)用户能对输入的密码进行隐藏或显示
.....
4、组合框:QComboBox
用于存放一些列表项
源码:
QComboBox(QWidget *parent = nullptr)
void addItem(const QString &text, const QVariant &userData = QVariant()) //向组合框中添加列表项
void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
void addItems(const QStringList &texts)
void insertItem(int index, const QString &text, const QVariant &userData = QVariant())
void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
void insertItems(int index, const QStringList &list)
void removeItem(int index)//移除
void setItemText(int index, const QString &text)//将列表项更新为新的列表项
//添加列表项
this->comboBox->addItem("星期一 2.5元");
this->comboBox->addItem("星期二 3.0元");
this->comboBox->addItem(QIcon(":/img/photo1.jpg"),"星期三 3.0元");
QStringList list;
list<<"星期四 3.1元"<<"星期五 3.2元";
this->comboBox->addItems(list);
qDebug()<<"组合框中的列表项数目:"<<this->comboBox->count()<<endl;
qDebug()<<"返回当前列表项的下标:"<<this->comboBox->currentIndex()<<endl;
qDebug()<<"返回当前列表项:"<<this->comboBox->currentText()<<endl;
int index=this->comboBox->findText("星期五 3.2元");//在组合框中查询是否有指定列表项,如果有,返回下标,如果没有返回-1
qDebug()<< "星期五 3.2元对应的下标:"<<index<<endl;
// QString itemText(int index) const//通过下标找到指定的列表项
QString text=this->comboBox->itemText(index);
qDebug()<<"下标为:index对应的列表项:"<<text<<endl;
QIcon icon=this->comboBox->itemIcon(2);
QStringList list1;
list1<<"昨天"<<"今天"<<"明天"<<"后天";
this->comboBox->insertItems(1,list1);//在指定位置插入列表项
this->comboBox->removeItem(index);//移除指定的列表项
this->comboBox->setItemText(index,"helloworld");
connect(this->comboBox,SIGNAL(activated(QString)),this,SLOT(rece1_Text(QString)));
connect(this->comboBox,SIGNAL(highlighted(int)),this,SLOT(rece2_Text_Index(int)));
信号:
void activated(int index) //当列表项变化时触发该信号
void activated(const QString &text)
void currentIndexChanged(int index) //当前列表项下标变化时触发该信号
void currentIndexChanged(const QString &text)
void currentTextChanged(const QString &text)//当前列表项变化时触发该信号
void editTextChanged(const QString &text)
void highlighted(int index) //列表项高亮时触发该信号
void highlighted(const QString &text)
//用组合框模拟账户的存储与取出
作业:
使用组合框模拟购物车
(1)用户可以添加物品到购物车中
(2)用户可以移除购物车中指定的物品
(3)用户可以清空并结算购物车中商品总价
(4)同一个商品用户可以购买多个
UI:
editable:设置组框当前列表项是否可编辑
currentText:获取组合框中的当前显示的列表项
currrenIdex:获取当前列表项的下标
maxVisibleItems:列表项可移动的最大数目
maxCount:设置组合框中最多能容纳的列表项的数目
insertPolicy:设置插入列表项的策略
sizeAdjustPolicy:设置组合框中列表项适应组合框
minimumContentsLength:最小的列表项的长度
iconsize:设置图片的大小
placeholderText:背景提示的文本
frame:边框
modelColumn:列表项
5、自旋框:QSpinBox
自旋框:
单精度自旋框:QSpinBox
QSpinBox(QWidget *parent = nullptr)
//单精度自旋框
//设置自旋框的大小
this->spinBox->resize(100,30);
//设置自旋框的位置
this->doubleSpinBox->move(100,0);
//设置自旋框调节的最大值
this->spinBox->setMaximum(10);
//设置自旋框调节的最小值
this->spinBox->setMinimum(0);
//设置自旋框调节范围
this->spinBox->setRange(0,10);
//设置自旋框显示的内容的前缀
this->spinBox->setPrefix("白菜:");
//设置自旋框显示的内容的后缀
this->spinBox->setSuffix("元");
//获取自旋框的内容
QString text=this->spinBox->text();
qDebug()<<"内容:"<<text<<endl;
//获取自旋框的数值
int data=this->spinBox->value();
qDebug()<<"数值:"<<data<<endl;
//设置自旋框当前显示的数值
this->spinBox->setValue(5);
//获取前缀
QString prefix=this->spinBox->prefix();
//获取后缀
QString suffix=this->spinBox->suffix();
//设置自旋框的步进值
this->spinBox->setSingleStep(2);
//双精度自旋框
this->doubleSpinBox->setDecimals(4);//设置双精度自旋框的精度(小数点的位数)
this->doubleSpinBox->setSingleStep(0.0001);
this->doubleSpinBox->move(150,0);
//其他方法参考单精度自旋框
connect(this->spinBox,SIGNAL(valueChanged(int)),this,SLOT(receive_Value(int)));
信号:
void textChanged(const QString &text)//当自旋框的文本变化时触发该信号,将文本内容发送出来
void valueChanged(int i)//当自旋框的数值变化时,触发该信号,将数值发送出来
双精度自旋框:QDoubleSpinBox
UI:
maxiMum:最大值
miniMum:最小值
range:范围
prefix:前缀
suffix:后缀
singleStep:步进值
.....
6、复选框:QCheckBox
QCheckBox(const QString &text, QWidget *parent = nullptr)
QCheckBox(QWidget *parent = nullptr)
Qt::CheckState checkState() const //获取复选框的状态
bool isTristate() const //获取复选框是否设置了三种状态
void setCheckState(Qt::CheckState state)//设置复选框的状态
void setTristate(bool y = true) //设置复选框是否有三种状态
Qt::Unchecked0The item is unchecked. //未选中状态
Qt::PartiallyChecked1The item is partially checked. Items in hierarchical models may be partially checked if some, but not all, of their children are checked. //半选中状态
Qt::Checked2The item is checked. //全选中状态
//设置大小
this->checkBox->resize(100,40);
//设置位置
this->checkBox->move(0,0);
//设置复选框的文本提示
this->checkBox->setText("是否同意该协议");
//设置复选框具有三种状态
this->checkBox->setTristate(true);//true:三种 false:两种
//设置复选框的状态
this->checkBox->setCheckState(Qt::PartiallyChecked);
//获取复选框的状态
Qt::CheckState state=this->checkBox->checkState();
if(state==Qt::PartiallyChecked)
{
qDebug()<<"半选中状态"<<endl;
}
connect(this->checkBox,SIGNAL(stateChanged(int)),this,SLOT(receive_State(int)));
信号:
void stateChanged(int state) //当复选框状态变化时,触发该信号,将该状态发送出去
UI:
text:设置文本
icon:设置图片
iconsize:图片大小
shortcut:快捷键
....
7、分组框:QGroupBox
对基本的控件进行分组设计
QGroupBox(const QString &title, QWidget *parent = nullptr)
QGroupBox(QWidget *parent = nullptr)
virtual ~QGroupBox()
Qt::Alignment alignment() const
bool isCheckable() const
bool isChecked() const
bool isFlat() const
void setAlignment(int alignment)
void setCheckable(bool checkable)
void setFlat(bool flat)
void setTitle(const QString &title)
QString title() const
//获取标题对齐方式
Qt::Alignment align=this->groupBox->alignment();
//设置分组框的大小
this->groupBox->resize(180,100);
//设置标题的对齐方式
this->groupBox->setAlignment(Qt::AlignRight);//左对齐
//设置标题
this->groupBox->setTitle("按钮组");
//获取标题
QString title=this->groupBox->title();
//设置分组框的复选框
this->groupBox->setCheckable(true);//分组框标题前有复选框
//设置选中该分组框
this->groupBox->setChecked(true);
//设置分组框边框是否隐藏
this->groupBox->setFlat(true);
信号:
void clicked(bool checked = false)
void toggled(bool on)
UI:
titile:设置标题
alignment:设置对齐方式
flat:设置边框是否隐藏
checkable:设置是否具有复选框
checked:设置复选框是否选中
8、滑动条:QSlider
QSlider(Qt::Orientation orientation, QWidget *parent = nullptr)
QSlider(QWidget *parent = nullptr)
virtual ~QSlider()
void setTickInterval(int ti)
void setTickPosition(QSlider::TickPosition position)
QSlider::NoTicks0Do not draw any tick marks.
QSlider::TicksBothSides3Draw tick marks on both sides of the groove.
QSlider::TicksAbove1Draw tick marks above the (horizontal) slider
QSlider::TicksBelow2Draw tick marks below the (horizontal) slider
QSlider::TicksLeftTicksAboveDraw tick marks to the left of the (vertical) slider
QSlider::TicksRightTicksBelowDraw tick marks to the right of the (vertical) slider
int tickInterval() const
QSlider::TickPosition tickPosition() const
信号:
void actionTriggered(int action)
void rangeChanged(int min, int max)
void sliderMoved(int value)
void sliderPressed()
void sliderReleased()
void valueChanged(int value)
//设置刻度值
this->slider->setTickInterval(10);
//设置滑动条的刻度的位置
this->slider->setTickPosition(QSlider::TicksBelow);
//获取刻度值
this->slider->tickInterval();
//获取位置
this->slider->tickPosition();
//设置滑动条的当前值
this->slider->setValue(5);
//设置滑动条的范围
this->slider->setRange(0,10);
//信号
connect(this->slider,SIGNAL(sliderMoved(int)),this,SLOT(value_Changed(int)));
9、进度条:QProgressBar
void reset() //复位到默认进度条的默认值
void setMaximum(int maximum)
void setMinimum(int minimum)
void setOrientation(Qt::Orientation)
void setRange(int minimum, int maximum)
void setValue(int value)
void valueChanged(int value)//进度条值改变时也会触发该信号
//复位
this->progressBar->reset();
//设置最大值
this->progressBar->setMaximum(100);
//设置最小值
this->progressBar->setMinimum(0);
//设置当前值
this->progressBar->setValue(50);
//设置进度条的范围
this->progressBar->setRange(0,100);
//设置进度条的摆放形式
this->progressBar->setOrientation(Qt::Horizontal);
//设置进度条的加载方向
this->progressBar->setInvertedAppearance(true);
//参考帮助
10、QTabWidget
参考帮助
11、QTreeWidget
参考帮助
.................
六、主界面:QMainWindow
包含了菜单栏、工具栏、状态栏以及工作区等功能
菜单栏:使用QMenuBar类管理,管理菜单栏中的菜单或者执行动作
执行动作:QAction类管理
工具栏:使用QToolBar类管理
状态栏:使用QStatusBar类管理
工作区:使用QDockWidget类管理
菜单项:QMenu类管理菜单项
QAction *addAction(const QString &text)
QAction *addAction(const QIcon &icon, const QString &text)
QAction *addAction(const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = 0)
QAction *addAction(const QIcon &icon, const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = 0)
QAction *addAction(const QString &text, Functor functor, const QKeySequence &shortcut = 0)
QAction *addAction(const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)
QAction *addAction(const QIcon &icon, const QString &text, Functor functor, const QKeySequence &shortcut = 0)
QAction *addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor, const QKeySequence &shortcut = 0)
QAction *addMenu(QMenu *menu)
QMenu *addMenu(const QString &title)
QMenu *addMenu(const QIcon &icon, const QString &title)
QMainWindow:
void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar) //添加工具栏
void addToolBar(QToolBar *toolbar)
QToolBar *addToolBar(const QString &title)
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget) //添加工作区
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)
1、菜单栏:QMenuBar
QAction *addAction(const QString &text) //添加执行的动作
QAction *addAction(const QString &text, const QObject *receiver, const char *member)
QAction *addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method)
QAction *addAction(const QString &text, Functor functor)
QAction *addMenu(QMenu *menu) //添加菜单或菜单项
QMenu *addMenu(const QString &title)
QMenu *addMenu(const QIcon &icon, const QString &title)
2、工具栏的设置:QToolBar
QAction *addAction(const QString &text)
QAction *addAction(const QIcon &icon, const QString &text)
QAction *addAction(const QString &text, const QObject *receiver, const char *member)
QAction *addAction(const QIcon &icon, const QString &text, const QObject *receiver, const char *member)
QAction *addAction(const QString &text, Functor functor)
QAction *addAction(const QString &text, const QObject *context, Functor functor)
QAction *addAction(const QIcon &icon, const QString &text, Functor functor)
QAction *addAction(const QIcon &icon, const QString &text, const QObject *context, Functor functor)
QAction *addWidget(QWidget *widget)
QAction *insertWidget(QAction *before, QWidget *widget)
void setAllowedAreas(Qt::ToolBarAreas areas) //设置工具栏停靠的区域
Qt::LeftToolBarArea0x1 //左边
Qt::RightToolBarArea0x2 //右边
Qt::TopToolBarArea0x4 //顶部
Qt::BottomToolBarArea0x8 //底部
Qt::AllToolBarAreasToolBarArea_Mask //所有区域
Qt::NoToolBarArea0 //没有
void setMovable(bool movable) //设置工具栏是否可移动
void setFloatable(bool floatable)//设置工具栏是否可浮动
3、状态栏:QStatusBar
QStatusBar(QWidget *parent = nullptr)
virtual ~QStatusBar()
void addPermanentWidget(QWidget *widget, int stretch = 0)
void addWidget(QWidget *widget, int stretch = 0)
QString currentMessage() const
int insertPermanentWidget(int index, QWidget *widget, int stretch = 0)
int insertWidget(int index, QWidget *widget, int stretch = 0)
bool isSizeGripEnabled() const
void removeWidget(QWidget *widget)
void setSizeGripEnabled(bool)
信号:
void messageChanged(const QString &message)//消息变化时触发该信号
//设置右下角是否有斜三角网格图标
ui->statusbar->setSizeGripEnabled(false);
//向状态栏中添加基本控件
// this->btn1->setText("100%");
// this->btn2->setText("UTF-8");
this->btn4->setFlat(true);
this->btn5->setFlat(true);
this->btn6->setFlat(true);
// ui->statusbar->addWidget(this->btn4);
// ui->statusbar->addWidget(this->btn2);
// statusBar()->addWidget(this->btn1);
ui->statusbar->addPermanentWidget(this->btn5);
ui->statusbar->addPermanentWidget(this->btn6);
ui->statusbar->showMessage("notebook load....",5000);
ui->statusbar->clearMessage();
connect(this->btn5,SIGNAL(clicked()),this,SLOT(add_Chu()));
4、工作区:QDockWidget
void setCentralWidget(QWidget *widget)//向中心工作区中添加基本的控件
QDockWidget(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
QDockWidget(const QString &title, QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
virtual ~QDockWidget()
Qt::DockWidgetAreas allowedAreas() const
QDockWidget::DockWidgetFeatures features() const
bool isAreaAllowed(Qt::DockWidgetArea area) const
bool isFloating() const
void setAllowedAreas(Qt::DockWidgetAreas areas)
void setFeatures(QDockWidget::DockWidgetFeatures features)
void setFloating(bool floating)
void setTitleBarWidget(QWidget *widget)
void setWidget(QWidget *widget)
QWidget *titleBarWidget() const
QAction *toggleViewAction() const
QWidget *widget() const
//工作区:QDockWidget
//向中心工作区中添加纯文本编辑框
QStringList list1;
list1<<"星期一"<<"星期二";
this->comboBox1->addItems(list);
this->setCentralWidget(this->plainTextEdit);
this->dockWidget->setWidget(this->comboBox1);
this->dockWidget->setFloating(true);
this->dockWidget->setFeatures(QDockWidget::NoDockWidgetFeatures);//工作区不能被移动、浮动
this->dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea);
this->addDockWidget(Qt::AllDockWidgetAreas,this->dockWidget);
作业:
(1)//实现食堂满意度调查表
要求:
(1)设置10个选项,选项题目自由返回
(2)每个选项下分4个选择,最好的选择分数为10分
(3)用户可以自行填写满意度调查表
(4)实现对满意度分值的计算,并给出相关建议(根据不同的分段,建议不同)
(5)用户必须将每个选项填写完成,如果没有填写完,则给予用户提示
例如:
你对食堂早餐满意度
很好:10 一般:6 不好:4 很差:0
(2)实现滑动条和进度条的相互控制
(3)试着模拟记事本的菜单栏的搭建
七、常用对话框
1、字体对话框:QFontDialog
QFont getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = FontDialogOptions())
返回值:QFont类型--字体
参数1:如果字体设置成功,ok返回true,否则返回false
参数2:设置初始字体
参数3:指定父对象
参数4:指定对话框标题
QFont getFont(bool *ok, QWidget *parent = nullptr)
返回值:QFont类型--字体
参数1:如果字体设置成功,ok返回true,否则返回false
参数2:指定父对象
2、输入对话框:QInputDialog
3、消息对话框:QMessageBox
void about(QWidget *parent, const QString &title, const QString &text) //about关于
void aboutQt(QWidget *parent, const QString &title = QString())
QMessageBox::StandardButton critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton) //critical有争议
QMessageBox::StandardButton information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton) //信息提示
返回值:QMessageBox::StandardButton返回按钮
QMessageBox::Ok0x00000400An "OK" button defined with the AcceptRole.
QMessageBox::Open0x00002000An "Open" button defined with the AcceptRole.
QMessageBox::Save0x00000800A "Save" button defined with the AcceptRole.
QMessageBox::Cancel0x00400000A "Cancel" button defined with the RejectRole.
QMessageBox::Close0x00200000A "Close" button defined with the RejectRole.
QMessageBox::Discard0x00800000A "Discard" or "Don't Save" button, depending on the platform, defined with the DestructiveRole.
QMessageBox::Apply0x02000000An "Apply" button defined with the ApplyRole.
QMessageBox::Reset0x04000000A "Reset" button defined with the ResetRole.
QMessageBox::RestoreDefaults0x08000000A "Restore Defaults" button defined with the ResetRole.
QMessageBox::Help0x01000000A "Help" button defined with the HelpRole.
QMessageBox::SaveAll0x00001000A "Save All" button defined with the AcceptRole.
QMessageBox::Yes0x00004000A "Yes" button defined with the YesRole.
QMessageBox::YesToAll0x00008000A "Yes to All" button defined with the YesRole.
QMessageBox::No0x00010000A "No" button defined with the NoRole.
QMessageBox::NoToAll0x00020000A "No to All" button defined with the NoRole.
QMessageBox::Abort0x00040000An "Abort" button defined with the RejectRole.
QMessageBox::Retry0x00080000A "Retry" button defined with the AcceptRole.
QMessageBox::Ignore0x00100000An "Ignore" button defined with the AcceptRole.
QMessageBox::NoButton0x00000000An invalid button.
参数1:指定父对象
参数2:指定标题
参数3:指定提示的文本
参数4:指定对话框中的按钮
参数5:设置默认按钮
QMessageBox::StandardButton question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton)//有疑问
QMessageBox::StandardButton warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton) //警告
4、颜色对话框:QColorDialog
5、文件对话框:QFileDialog
练习:
设计一个记事本
(1)更改字体颜色
(2)更改字体大小
(3)新建记事本
(4)查找记事本中的数据
(5)设置消息提示
(6)设置粘贴、复制、剪切、撤销等
(7)使用快捷键进行第(6)步操作
......................