Qt6.0学习,在此做个记录,方便日后查找复习
本次项目用到的控件有:复选框,单选按钮。文本编辑框。
项目目录结构:
项目运行效果图:
实现的功能:
勾选Underline、Italic,Bold时,下方的文本会添加下划线,斜体,加粗,取消勾选时,格式设置失效
勾选其中任意一个颜色的时候,文本会对应的设置成相应的颜色。
untitled.pro:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
widget.cpp
HEADERS += \
widget.h
FORMS += \
widget.ui
RC_ICONS = bbb.ico #设置应用图标
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin #‘##{TARGET}’表示替换函数,表示用TARGET变量的值替换。
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Test_Widget; } //定义一个命名空间,包含一个类Test_Widget,此处的类是UI界面的类。
QT_END_NAMESPACE
class Test_Widget : public QWidget //定义一个继承自QWidget类的Test_Widget类,这个名字和ui界面中窗口的objectname相同。此类就是实现交互业务逻辑的类。
{
Q_OBJECT //插入的一个宏,表示Test_Widget类就可以使用信号与槽、属性等功能。
public:
Test_Widget(QWidget *parent = nullptr); //定义构造函数,构造函数名称和类名相同
~Test_Widget();
private slots:
void setBlodFont(); //设置字体为粗体
void setItalicFont(); //设置字体为斜体
void setUnderlineFont(); //为文本添加下划线
void setFontColor(); //设置字体颜色
private:
Ui::Test_Widget *ui; //定义一个指针对象。指向窗口界面,可由此调用窗口界面的控件。
};
#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Test_Widget w; //定义并创建窗口对象。
w.show(); //显示窗口
return a.exec(); //运行应用程序,开始应用程序的消息循环和事件处理。
}
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Test_Widget::Test_Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Test_Widget)
{
ui->setupUi(this);
//connect,将信号与槽函数绑定,第一个参数是信号发出者,第二个是发出的信号,第三个是当前窗口对象,第四个是槽函数,就是接收信号的函数,对信号进行响应。
//connect(ui->pushButton_2,SIGNAL(clicked(bool)),this,SLOT(pushButton_2_clicked()));
connect(ui->checkBox_bold,SIGNAL(clicked(bool)),this,SLOT(setBlodFont()));
connect(ui->checkBox_italic,SIGNAL(clicked(bool)),this,SLOT(setItalicFont()));
connect(ui->checkBox_underline,SIGNAL(clicked(bool)),this,SLOT(setUnderlineFont()));
connect(ui->radioButton_black,SIGNAL(clicked(bool)),this,SLOT(setFontColor()));
connect(ui->radioButton_blue,SIGNAL(clicked(bool)),this,SLOT(setFontColor()));
connect(ui->radioButton_red,SIGNAL(clicked(bool)),this,SLOT(setFontColor()));
}
Test_Widget::~Test_Widget() //析构函数,用于销毁对象。
{
delete ui;
}
//设置字体为粗体
void Test_Widget::setBlodFont()
{
if (ui->checkBox_bold->checkState()) //判断复选框的状态,如果是选中的,则将字体设置为粗体,否则取消设置粗体。
{
QFont font = ui->plainTextEdit->font();
font.setBold(true);
ui->plainTextEdit->setFont(font);
}else{
QFont font = ui->plainTextEdit->font();
font.setBold(false);
ui->plainTextEdit->setFont(font);
}
}
//复选框信息响应槽函数,对字体进行斜体设置或者取消设置
void Test_Widget::setItalicFont()
{
if(ui->checkBox_italic->checkState())
{
QFont font = ui->plainTextEdit->font();
font.setItalic(true);
ui->plainTextEdit->setFont(font);
}else{
QFont font = ui->plainTextEdit->font();
font.setItalic(false);
ui->plainTextEdit->setFont(font);
}
}
//为文本添加下划线
void Test_Widget::setUnderlineFont()
{
if(ui->checkBox_underline->checkState())
{
QFont font = ui->plainTextEdit->font();
font.setUnderline(true);
ui->plainTextEdit->setFont(font);
}else{
QFont font = ui->plainTextEdit->font();
font.setUnderline(false);
ui->plainTextEdit->setFont(font);
}
}
//设置字体红色。
void Test_Widget::setFontColor()
{
QPalette pt = ui->plainTextEdit->palette();
if(ui->radioButton_red->isChecked())
{
pt.setColor(QPalette::Text,Qt::red);
}else if(ui->radioButton_blue->isChecked())
{
pt.setColor(QPalette::Text,Qt::blue);
}else if(ui->radioButton_black->isChecked())
{
pt.setColor(QPalette::Text,Qt::black);
}else{
pt.setColor(QPalette::Text,Qt::black);
}
ui->plainTextEdit->setPalette(pt);
}
主要的逻辑代码在widget.cpp文件中,没有使用快捷方式为按钮添加槽函数,而是使用connect()手写了信号和槽函数的绑定
勾选字体格式复选框和取消勾选是在一个槽函数中进行判断复选框是否勾选,如果勾选了则设置字体格式,如果判断取消勾选则设置字体格式失效。
参考书本《Qt6 C++开发指南》。