QT GUI编程-CSDN博客
00:按键,对话框,垂直布局
包含内容:
按键,对话框,垂直布局的创建
#include <QPushButton>
#include <QVBoxLayout>
//普通按钮
QPushButton *bt_test;
//普通按钮示例
bt_test = new QPushButton("ok");
bt_test->setMinimumSize(200, 100); //设置最小尺寸
bt_test->setFlat(true); //设置无边框
bt_test->setIconSize(QSize(80, 80)); //设置按钮图标大小
bt_test->setIcon(QIcon("car.png")); //设置按钮图标
//垂直布局
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addWidget(bt_test);
setLayout(vbox);
02:button 文本行 文本行输入数据提取 按键语音播报 打印输出
02:水平布局 || 网格状布局
ui布局类
背景设计
左边添加widget(窗口),右键编辑样式表,修改其设定(eg。颜色,点击三角框background-color)
窗体大小改变时,内部内容比例不改变,边框会留空
注意是针对竖直和水平的layout和widget的前提下其他会报错
Btn按下特效,静态特效等 和导入其美化图标
鼠标到此的悬浮特效
Selectors may contain pseudo-states that denote that restrict the application of the rule based on the widget's state. Pseudo-states appear at the end of the selector, with a colon (:) in between. For example, the following rule applies when the mouse hovers over a QPushButton:
QPushButton:hover { color: white }
Pseudo-states can be negated using the exclamation operator. For example, the following rule applies when the mouse does not hover over a QRadioButton:
QRadioButton:!hover { color: red }
按下特效:右键按键,修改样式
Pseudo-states can be chained, in which case a logical AND is implied. For example, the following rule applies to when the mouse hovers over a checked QCheckBox:
QPushButton :hover:pressed{ color: white } 注意是QPushButton
Pseudo-states can be chained, in which case a logical AND is implied. For example, the following rule applies to when the mouse hovers over a checked QCheckBox:
QCheckBox:hover:pressed { color: white }
静态特效:
QPushButton { color: red; background-color: white }//
导入其美化图标
首先把要导入的图片文件放到代码文件里来里面来(pro文件,explore。。。。)
右键工程文件夹,add new,QT resource file(资源文件),选择其对应的资源目录
然后添加(加不加前缀看自己),最后要是qrc文件盒资源文件在一个文件夹里
ctrl+s保存,到此ok
在ui界面,属性里windowicon,小光标,选择文件,使其对应
按键则是右键改变样式,然后添加资源
同理能在3种状态下来对应其资源图
添加槽
方式一:ui里 信号和槽编辑器 点'+'添加
方式二:ui里右键对象 转到槽 选择对应型号 后会自动转到发送此时间后要执行的函数
槽与信号连接方式
主要采用方式er
其余43.信号与槽的四种代码实现方式_哔哩哔哩_bilibili(connect函数)
1.按键按下加载提前设置的对应目录文件,并输出其内容
void MainWindow::on_BtnRead_clicked()
{
//1.打开文件
QFile file("E:/test.txt");
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug()<<"file open error";
}
//2.读文件
char context[100]={'\0'};
if(!file.read(context,100)==-1)
{
qDebug()<<"file read error";
return;
}// 返回-1有问题就不显示输出文件
else
{
//3.显示输出文件内容
qDebug()<<"file open success";
qDebug() <<context;
}
}
2.按下按键出现 打开文件选择框,确认后读选定文件,输出其目录和内容
void MainWindow::on_pushButton_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open Image"),
"E:", //默认打开的文件夹位置
tr("Text files (*.txt)"));//打开的文件类型eg."Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)"
qDebug()<<fileName; //输出选择打开文件的文件名字
//1.打开文件
QFile file(fileName);//注意没有""
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug()<<"file open error";
}
//2.读文件
char context[100]={'\0'};//这里设置读的文本暂存大小
if(!file.read(context,100)==-1)
{
qDebug()<<"file read error";
return;
}// 返回-1有问题就不显示输出文件
else
{
//3.显示输出文件内容
qDebug()<<"file read success";
qDebug() <<context;
file.close();//回收资源
}
}
3.按键按下 出现 选择框,可以多选文件
.........
4.//实现功能:打开选择任务栏 保存一个全新文件 并输出保存的地址到调试框
void MainWindow::on_pushButton_3_clicked()
{
QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
"D:/tessst.txt", //已开默认的保存地址
tr(" Text(*.txt *.doc )")); //保存格式
qDebug()<<fileName;
QFile file;
file.setFileName(fileName);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
qDebug()<<"file open error";
}
QTextStream out(&file);
out.setCodec("UTF-8");
out<<"Qdialog Write Data to the Txt File";
file.close();
}
5.//实现功能:点击打开按键,打开txt文件,并输出到text文本框
void MainWindow::on_BtnOpean_clicked()
{
std::cout<<"BtnOpen is chicked"<<std::endl;//输出数据
QString fileName=QFileDialog::getOpenFileName(this,tr("Open file"),
"D:",
tr("Text(*.txt)"));//打开文件选择框
ui->textEdit->clear();//对textEdit清屏
QFile file;
file.setFileName(fileName);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
qDebug()<<"file open error";
}
QTextStream in(&file);
in.setCodec("UTF-8");
while(!in.atEnd())
{
QString context =in.readLine();
qDebug()<<qPrintable(context);//输出文件内容
//ui->textEdit->setText(context);// textEdit是文本对象名 每打开一个文件会覆盖,
ui->textEdit->append(context);//每打开一个文件,它的内容会加在后面
}
file.close();
}
6.//实现功能:打开选择任务栏 另存为文本框内容为一个文件
void MainWindow::on_BtnSave_clicked()
{
QString fileName=QFileDialog::getSaveFileName(this,tr("Save File"),
"D:new.txt",
tr("Text(*.txt*.doc)"));
QFile file;
file.setFileName(fileName);
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
{
qDebug()<<"file open error";
}
QTextStream out(&file);
out.setCodec("UTF-8");
QString context=ui->textEdit->toPlainText();
out<<context;//text内容保存到文件
qDebug()<<context;//输出text内容
file.close();
}
改进版看:11.
7.//实现功能:点击打开按键,打开txt文件,并输出到text文本框 加入更加下拉款选择调整打开的编码格式
1.先获取点击的 下拉框里分框的索引号和对应下拉框名字
在此处添加connect连接点击的信号和对应处理的槽函数
声明自定义槽函数
最后定义它
void MainWindow::oncurrentIndexChanged(int index)
{
qDebug()<<index;//输出索引号
qDebug()<<ui->combox->currentText();//输出对应下拉框名字
}
8.在“打开”按键的槽函数里添加根据下拉框选择的编码格式来自动调整打开文件格式的 语句
QString str=ui->comboBox->currentText();//获取下拉框返回文字
const char* c_str=str.toStdString().c_str();//将QString转化为char *c类型
in.setCodec(c_str);//设置文字对应的编码格式
整个打开按键的 槽函数:
//实现功能:点击打开按键,打开txt文件,并输出到text文本框 加入更加下拉款选择调整打开的编码格式
void MainWindow::on_BtnOpean_clicked()
{
std::cout<<"BtnOpen is chicked"<<std::endl;//输出数据
QString fileName=QFileDialog::getOpenFileName(this,tr("Open file"),
"D:",
tr("Text(*.txt)"));//打开文件选择框
ui->textEdit->clear();//对textEdit清屏
QFile file;
file.setFileName(fileName);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
qDebug()<<"file open error";
}
QTextStream in(&file);
QString str=ui->comboBox->currentText();//获取下拉框返回文字
const char* c_str=str.toStdString().c_str();//将QString转化为char *c类型
in.setCodec(c_str);//设置文字对应的编码格式
// in.setCodec("UTF-8");
while(!in.atEnd())
{
QString context =in.readLine();
qDebug()<<qPrintable(context);//输出文件内容
//ui->textEdit->setText(context);// textEdit是文本对象名 每打开一个文件会覆盖,
ui->textEdit->append(context);//每打开一个文件,它的内容会加在后面
}
file.close();
}
9.改进一点:在修改下拉框编码时,会自动重新打开文件,不需要再手动打开
定义一个全局变量存放打开文件的地址
在"打开"按键的槽函数里加上 保存打开文件地址到全局变量的语句
此槽函数原码
//实现功能:点击打开按键,打开txt文件,并输出到text文本框 加入更加下拉款选择调整打开的编码格式
void MainWindow::on_BtnOpean_clicked()
{
std::cout<<"BtnOpen is chicked"<<std::endl;//输出数据
QString fileName=QFileDialog::getOpenFileName(this,tr("Open file"),
"D:",
tr("Text(*.txt)"));//打开文件选择框
fileName_last=fileName;//每次打开文件都会用全局变量记录下来这个文件名
ui->textEdit->clear();//对textEdit清屏
QFile file;
file.setFileName(fileName);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
qDebug()<<"file open error";
}
QTextStream in(&file);
QString str=ui->comboBox->currentText();//获取下拉框返回文字
const char* c_str=str.toStdString().c_str();//将QString转化为char *c类型
qDebug()<<"textshow by:"<<str;
in.setCodec(c_str);//设置文字对应的编码格式
//in.setCodec("UTF-8");
//开始显示内容
while(!in.atEnd())
{
QString context =in.readLine();
qDebug()<<qPrintable(context);//输出文件内容
//ui->textEdit->setText(context);// textEdit是文本对象名 每打开一个文件会覆盖,
ui->textEdit->append(context);//每打开一个文件,它的内容会加在后面
}
file.close();
}
因为是每次更改下拉框时,进行重新打开窗口显示所以核心代码要在下拉框的槽函数
void MainWindow::oncurrentIndexChanged(int index)
{
qDebug()<<index;
qDebug()<<ui->comboBox->currentText();//输出对应下拉框名字
ui->textEdit->clear();
QFile file;
file.setFileName(fileName_last);//对应打开的文件地址
if(file.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug()<<fileName_last<<"is open";
QTextStream in(&file);
in.setCodec(ui->comboBox->currentText().toStdString().c_str()); //后面是吧currentText的toStdString部分转化为c_str格式
qDebug()<<"textshow by:"<<ui->comboBox->currentText();
//开始显示内容
while(!in.atEnd())
{
QString context =in.readLine();
qDebug()<<qPrintable(context);//输出文件内容
//ui->textEdit->setText(context);// textEdit是文本对象名 每打开一个文件会覆盖,
ui->textEdit->append(context);//每打开一个文件,它的内容会加在后面
}
file.close();
qDebug()<<fileName_last<<"is close";
}
}
结果演示
10.窗口左上角文本设置
this->setWindowTitle("文本设置内容在这");
使用场景1.在打开一个文件时,窗口实时更新其名字到窗口左上角
主要利用QString fileName来返回文件地址显示到左上角窗口标题
在读取文件后fileName有值在修改,确保无误
总函数:
//实现功能:点击打开按键,打开txt文件,并输出到text文本框 加入更加下拉款选择调整打开的编码格式
//同时 实时更新左上角的标题名
void MainWindow::on_BtnOpean_clicked()
{
std::cout<<"BtnOpen is chicked"<<std::endl;//输出数据
QString fileName=QFileDialog::getOpenFileName(this,tr("Open file"),
"D:",
tr("Text(*.txt)"));//打开文件选择框
fileName_last=fileName;//每次打开文件都会用全局变量记录下来这个文件名
ui->textEdit->clear();//对textEdit清屏
QFile file;
file.setFileName(fileName);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
qDebug()<<"file open error";
}
QTextStream in(&file);
this->setWindowTitle(fileName+"记事本");//点击打开按键其读了文件时 实时修改左上窗口文字
QString str=ui->comboBox->currentText();//获取下拉框返回文字
const char* c_str=str.toStdString().c_str();//将QString转化为char *c类型
qDebug()<<"textshow by:"<<str;
in.setCodec(c_str);//设置文字对应的编码格式
//in.setCodec("UTF-8");
//开始显示内容
while(!in.atEnd())
{
QString context =in.readLine();
qDebug()<<qPrintable(context);//输出文件内容
//ui->textEdit->setText(context);// textEdit是文本对象名 每打开一个文件会覆盖,
ui->textEdit->append(context);//每打开一个文件,它的内容会加在后面
}
file.close();
}
结果:
同理对应 关闭按键 就要恢复原样 :
this->setWindowTitle("欢迎哥哥");//左上角文本框标题回复原样
窗口标题初始化设定在ui里面对应窗口选中的window Title
11.//实现功能:打开选择任务栏 另存为文本框内容为一个文件
且文件格式保存为目前选择的格式
由6.升级
主要利用
QString str=ui->comboBox->currentText();//获取下拉框返回文字
const char* c_str=str.toStdString().c_str();//将QString转化为char *c类型
out.setCodec(c_str);//设置保存格式 文字对应的下拉款选择编码格式
完成函数:
//实现功能:打开选择任务栏 另存为文本框内容为一个文件 且文件格式保存为目前选择的格式
void MainWindow::on_BtnSaveAs_clicked()
{
QString fileName=QFileDialog::getSaveFileName(this,tr("Save File"),
"D:new.txt",
tr("Text(*.txt*.doc)"));
QFile file;
file.setFileName(fileName);
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
{
qDebug()<<"file open error";
}
QTextStream out(&file);
QString str=ui->comboBox->currentText();//获取下拉框返回文字
const char* c_str=str.toStdString().c_str();//将QString转化为char *c类型
out.setCodec(c_str);//设置保存格式 文字对应的下拉款选择编码格式
QString context=ui->textEdit->toPlainText();
out<<context;//text内容保存到文件
qDebug()<<context;//输出text内容
file.close();
}
12.//实现功能:保存文本框内容到当前文件 且文件格式保存为目前选择的格式
利用全局变量fileName_last和
QString str=ui->comboBox->currentText();//获取下拉框返回文字
const char* c_str=str.toStdString().c_str();//将QString转化为char *c类型
out.setCodec(c_str);//设置保存格式 文字对应的下拉款选择编码格式
完成函数:
//实现功能:保存文本框内容到当前文件 且文件格式保存为目前选择的格式
void MainWindow::on_BtnSave_clicked()
{
QFile file;
file.setFileName(fileName_last);
if(!file.open(QIODevice::WriteOnly|QIODevice::Text))
{
qDebug()<<"file open error";
}
QTextStream out(&file);
QString str=ui->comboBox->currentText();//获取下拉框返回文字
const char* c_str=str.toStdString().c_str();//将QString转化为char *c类型
out.setCodec(c_str);//设置保存格式 文字对应的下拉款选择编码格式
QString context=ui->textEdit->toPlainText();
out<<context;//text内容保存到文件
qDebug()<<context;//输出text内容
file.close();
}
函数介绍
1.cout(打印输出)
#include<iostream> std::cout<<"Btn is chicked"<<std::endl;
2.弹窗
#include <QMessageBox>
简易弹窗:
QMessageBox msgBox;
msgBox.setText("clear is chicked");//弹窗内容
msgBox.exec();
updata版本:
更详细的搜索QMessageBox
3.Qtime定时器
Qt扫盲-QTimer定时器理论总结-CSDN博客
对象控件介绍:
1.text文本框
ui->textEdit->clear();//对textEdit清屏
//ui->textEdit->setText(context);// textEdit是文本对象名 覆盖后显示,
ui->textEdit->append(context);//内容会加在后面
QString context=ui->textEdit->toPlainText();//读取文本框内容给QString变量 context
2.COMBO BOX 下拉框
槽函数介绍
void MainWindow::on_xxxxxxxx_currentIndexChanged(int index)//当前选中项发生变化进入
获取点击的 下拉框里分框的索引号和对应下拉框名字
在此处添加connect连接点击的信号和对应处理的槽函数
声明自定义槽函数
最后定义它
void MainWindow::oncurrentIndexChanged(int index)
{
qDebug()<<index;//输出索引号
qDebug()<<ui->combox->currentText();//输出对应下拉框名字
}
3.QDoubleSpinBox
QDoubleSpinBox的使用示例-CSDN博客
4.QRadioButton