QT常用快捷键及接口
常用快捷键
//
注释: ctrl+/
运行:ctrl+r
构建:ctrl+b
转到定义/声明:F2
返回:alt+←
前进:alt+→
常用接口
//
设置窗口名称:setWindowTitle
重置窗口大小:resize
设置固定窗口大小:setFixSize
设置位置:move
设置父亲:setParent
设置文本:setText
设置字体:setFont
设置样式表属性:setStyleSheet
显示:show
信号和槽
它是观察者模式的一种简易方式,使用connect 函数可以为信号与槽建立好连接,当信号触发时,槽出现相应的处理。信号来自被观察者,槽来自观察者。
- signal信号:函数声明,无需实现,系统大多数类都内置了信号,开发者也可以自定义信号。
- slot槽:也是个函数,一般是类的成员函数,且有声明且有实现体,系统大多数类都内置了槽,开发者也可以自定义槽。
case 1 鼠标点击事件
//最大化按钮(被观察者-触发信号对象)
auto btnMax =new QPushButton("最大化",this);
//this 窗口(观察者-接收信号对象)
//建立信号 和 槽(处理信号函数)连接
connect(btnMax,&QPushButton::clicked,this,&QWidget::showMaximized);//connect(被观察者,信号,观察者,槽)
case 2 鼠标长按与松下事件
设置一个按钮,鼠标按下,打印“被打了”,鼠标抬起,打印“反抗了”
atuo btn=new QPushButton("老鼠",this);
//c++新Lamda表达式
//[可访问外部变量](参数列表)->返回值类型{函数体}
//[=](){} 值传递形式捕获所有外部变量,内部变量不能改变值
//[&](){} 引用形式捕获所有外部变量,可以改变实际变量值
[]()->void
{
qDebug()<<"被打了!";
}();
connect(btn,&QPushButton::pressed,[](){
qDebug()<<"老鼠被打了";
});
connect(btn,&QPushButton::released,[](){
qDebug()<<"老鼠反抗了";
});
connect 函数
1. connect(被观察者,信号,观察者,槽)//用法1
2. connect(被观察者,信号,Lamda表达式)//用法2
自定义信号和槽
自定义槽:
1、有函数声明且有实现
2、返回值类型为void
3、槽函数可以带参,可以重载(槽函数实参来自信号函数)*
自定义信号:
1、写在signal;
2、只需声明,无需实现
3、返回值类型为void
4、支持带参,且能重载
// 自定义槽example:点击按钮,打印“boss死了”
关键字:explicit 修饰函数,无法自动转换类型
eg: BossDead();//boss 死亡槽函数
void Boss::BossDead()
{
qDebug<<"boss 死了";
}
//观察者 boss 处理函数:BossDead()
//被观察者 按钮 信号: 点击
//按钮点击 处理boss 死亡
auto btn=QPushButton("击杀",this);//被观察者
auto boss=new Boss();//观察者
connect(btn,&QPushButton::clicked,boss,&Boss::BossDead);//绑定信号
connect(btn,&QPushButton::clicked,[](){
});//Lamda表达式形式
//自定义信号example: boss死亡信号广播后 触发 boss死亡槽函数
//具体分两步:点击按钮 触发 死亡信号广播; 死亡信号广播 触发 boss死亡槽函数
signal://
void DeadSignal();//自定义信号
自定义信号和槽特点:
1、一个信号可以被多个槽绑定;
2、同一个槽可以绑定多个信号;
3、信号和槽的函数参数表一一对应;
4、信号的参数表可以多于槽函数,反之,槽函数的参数列表不能多于信号函数的参数列表;
5、信号可以绑定信号;
disconnect();
eg:
connect(btn3,&QPushButton::clicked,mboss,deadsignal1);
//解除绑定disconnect(btn3,&QPushButton::clicked,mboss,deadsignal1);
信号和槽解除绑定
常用控件
- 按钮控件: QPushButton
- 打印控件:QDebug
- 文本控件: QLabel
QLabel *label =new QLabel;
laber->setParent(this);
label->move(x,y);
label->setText("hello world");
label->setFont(QFont("楷体",20,10,1));//匿名对象
- 滑动条控件:QSlider
QSlider *slider =new QSlider;
slider->setParent(this);
slider->move(x,y);
slider->setValue(100);
slider->setFont(QFont("楷体",20,10,1));//匿名对象,字体大小20,加粗10,倾斜
- 进度条控件:QProgressBar
QProgressBar * bar= new QProgressBar;
bar->setParent(this);
bar->move(0,200);
bar->resize(this->size());//设置进度条大小为窗口大小
//bar->resize(this->size().width(),50);//设置进度条大小为窗口大小
bar->setValue(0);
- 文本编辑框控件:QTextEdit
QTextEdit* edit = QTextEdit;
edit->move(0,100);
edit->resize(500,500);
edit->setParent(this);
edit->setFontUnderline(1);
edit->setFontPointSize(qreal(35.5));
edit->setText("hello world");
case 3 通过滑动条改变字体大小
connect(slider,QSlider::valueChanged,[label](int _value){
label->setFont(QFont("楷体“,_value,10,1)
label->resize(_value,_value);
});
case 4 通过滑动条改变进度条
connect(slider,Qlider::valueChanged,[bar](int _value){
bar->SetValue(_value);
});
case 5 通过编辑文本框改变Label文本内容
connect(edit,QTextEdit::textChanged,[label](){
QString text = edit->toPlainText();
label->setText(text);
});
文件操作与二进制文件
常用库
- QFile
- QIODevice
- QByteArray
- QFileDialog
文件读取
- 选择文件
QString filename = QFileDialog::getOpenFileName();
- 创建文件对象
QFile file(&filename);
- 打开文件并读取文件
if(!file.open(QIODevice::ReadOnly)
return;
QByteArray arr+ =file.readline()
- 关闭文件
file.close()
文件修改并另存为
- 新建文件
QString filename = QFileDialog::getSaveFileName(this,"另存为","C:/unname.docx")
- 创建文件对象
QFile file(&filename);
- 打开文件并修改(写)文件
if(!file.open(QIODevice::WriteOnly)
return;
QString str = ui->textEdit->toPlainText();
file.write(str.toUtf8());//将QString转换为QByteArray
- 关闭文件
file.close()
保存为二进制文件
- 新建二进制文件
QString filename = QFileDialog :: getSaveFileName(this,"保存为二进制文件","C:/unname.bin","*.bin");
QString text = ui->textEdit->toPlainText();
- 创建文件对象
QFile file(filename)
- 创建数据流对象并写入文件
QDataStream fout(&file)//传入文件对象指针
fout << text;
- 关闭文件
file.close();
读取二进制文件
- 打开二进制文件
QString filename = QFileDialog :: getOpenFileName(this,"保存为二进制文件","C:/","*.bin");
- 创建文件对象
QFile file(filename)
- 创建数据流对象并读取
QDataStream fin(&file)//传入文件对象指针
QString text;
fin>>text;
QDebug() << text;
- 关闭文件
file.close();
配置文件
#include <QSettings>
//在槽函数下添加下面代码:::
//1、创建配置文件
QSettings settingsFile("config.ini");
//2、保存设置到配置文件
settingsFile.SetValue("volume",value);
//在mainwindow 中添加:
//读取(加载)配置文件
QSettings setting("config.ini");
ui->verticalSilder->setValue(setting.value("volume").toInt())