示例目录
说明
分享下自己学习 Qt 的记录 . . .
创建 以Dialog 为基类的项目,关闭UI界面复选框,选择纯代码开发。
实际开发过程,并不只是单纯使用代码,而是结合ui界面,更加快速方便
,因此本次的代码开发所需的代码行较多,仅做学习练习,了解开发原理。【示例功能】实现输入文本后,可以更改文本的格式和颜色,并实时显示;
可先浏览底部的代码文件 . . .
最终示例展示
1. 添加需要的部件头文件
#include <QCheckBox> // 复选框
#include <QRadioButton> // 单选按钮
#include <QPlainTextEdit> // 纯文本编辑器
#include <QPushButton> // 下压按钮
#include <QBoxLayout> // 布局管理
2. 添加所需部件
- 头文件中添加各个组件的指针变量
// dialog.h 文件
private:
QCheckBox *chkBoxUnderLine; // 下划线复选框
QCheckBox *chkBoxItalic; // 斜体复选框
QCheckBox *chkBoxBold; // 粗体复选框
QRadioButton *rBtnBlack; // 黑色单选框
QRadioButton *rBtnRed; // 红色单选框
QRadioButton *rBtnBlue; // 绿色单选框
QPlainTextEdit *txtEdit; // 纯文本编辑器
QPushButton *btnOK; // 确定按钮
QPushButton *btnCancel; // 取消按钮
QPushButton *btnClose; // 退出按钮
3. 初始化组件(指针变量)
- 定义组件初始化函数,为其分配内存;
// dialog.h 文件
private:
initUI(); // 声明初始化界面部件函数
// dialog.cpp 文件
. . .
定义初始化函数
代码见底部
. . .
4. 设计界面布局
- 先创建水平布局,将目标组件逐个放入;
- 再创建垂直布局,放入已有的水平布局和组件;
- 将最终的设计布局设置为窗体的布局;
- // 代码见底部
5. 定义槽函数实现功能
- 根据需求在 .h 文件声明槽函数,并在 .cpp 文件中定义实现(见底部完整代码);
// dialog.h 文件进行声明
private slots:
void onChkBoxUnderLine(bool checked); // 文本下划线
void onChkBoxItalic(bool checked); // 文本斜体
void onChkBoxBold(bool checked); // 文本加粗
void setTextFontColor(); // 设置文本颜色
6. connect 关联信号和槽函数
- 在 .cpp 文件中定义信号槽初始化函数来实现关联;
initSignalSlots(); // 初始化信号槽函数
7. 代码
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <QCheckBox>
#include <QRadioButton>
#include <QPlainTextEdit>
#include <QPushButton>
#include <QBoxLayout>
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private slots:
void onChkBoxUnderLine(bool checked); // 文本下划线
void onChkBoxItalic(bool checked); // 文本斜体
void onChkBoxBold(bool checked); // 文本加粗
void setTextFontColor(); // 设置文本颜色
private:
// 初始化各个部件
QCheckBox *chkBoxUnderLine; // 下划线复选框
QCheckBox *chkBoxItalic; // 斜体复选框
QCheckBox *chkBoxBold; // 粗体复选框
QRadioButton *rBtnBlack; // 黑色单选框
QRadioButton *rBtnRed; // 红色单选框
QRadioButton *rBtnBlue; // 绿色单选框
QPlainTextEdit *txtEdit; // 纯文本编辑器
QPushButton *btnOK; // 确定按钮
QPushButton *btnCancel; // 取消按钮
QPushButton *btnClose; // 退出按钮
void initUI(); // 界面部件初始化
void initSignalSlots(); // 初始化信号槽关联函数
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
initUI();
initSignalSlots();
}
Dialog::~Dialog()
{
}
void Dialog::onChkBoxUnderLine(bool checked)
{
// 步骤:提取编辑框中文本,然后设置成目标格式,组后将其写入到编辑框中
QFont font = txtEdit->font();
font.setUnderline(checked);
txtEdit->setFont(font);
}
void Dialog::onChkBoxItalic(bool checked)
{
QFont font = txtEdit->font();
font.setItalic(checked);
txtEdit->setFont(font);
}
void Dialog::onChkBoxBold(bool checked)
{
QFont font = txtEdit->font();
font.setBold(checked);
txtEdit->setFont(font);
}
void Dialog::setTextFontColor()
{
// 步骤:提取文本的调色板,然后设置颜色,最终写入到编辑框
QPalette palette = txtEdit->palette();
if (rBtnRed->isChecked()) {
palette.setColor(QPalette::Text, Qt::red);
} else if (rBtnBlue->isChecked()) {
palette.setColor(QPalette::Text, Qt::blue);
} else if (rBtnBlack->isChecked()) {
palette.setColor(QPalette::Text, Qt::black);
}
txtEdit->setPalette(palette);
}
void Dialog::initUI()
{
// 初始化各个部件
chkBoxUnderLine = new QCheckBox("Underline");
chkBoxItalic = new QCheckBox("Italic");
chkBoxBold = new QCheckBox("Bold");
rBtnBlack = new QRadioButton("black");
rBtnBlack->setChecked(true); // 默认为黑色
rBtnRed = new QRadioButton("red");
rBtnBlue = new QRadioButton("blue");
btnOK = new QPushButton("ok");
btnCancel = new QPushButton("cancel");
btnClose = new QPushButton("close");
txtEdit = new QPlainTextEdit;
txtEdit->setPlainText("");
QFont font = txtEdit->font();
font.setPointSize(20);
txtEdit->setFont(font);
// 设计布局
QHBoxLayout *HLay1 = new QHBoxLayout; // 第一个水平布局,存放字体格式复选框
HLay1->addWidget(chkBoxUnderLine);
HLay1->addWidget(chkBoxItalic);
HLay1->addWidget(chkBoxBold);
QHBoxLayout *HLay2 = new QHBoxLayout; // 第二个水平布局,存放字体颜色单选框
HLay2->addWidget(rBtnBlack);
HLay2->addWidget(rBtnRed);
HLay2->addWidget(rBtnBlue);
QHBoxLayout *HLay3 = new QHBoxLayout; // 第三个水平布局,存放选择按钮
HLay3->addWidget(btnOK);
HLay3->addWidget(btnCancel);
HLay3->addStretch(); // 之间添加可拉伸设计
HLay3->addWidget(btnClose);
QVBoxLayout *VLay = new QVBoxLayout; // 垂直布局,管理上述水平布局
VLay->addLayout(HLay1);
VLay->addLayout(HLay2);
VLay->addWidget(txtEdit);
VLay->addLayout(HLay3);
setLayout(VLay); // 写入到窗口界面
}
void Dialog::initSignalSlots()
{
// 关联格式复选框与相应的槽函数
connect (chkBoxUnderLine, SIGNAL(clicked(bool)), this, SLOT(onChkBoxUnderLine(bool)));
connect(chkBoxItalic,SIGNAL(clicked(bool)),this,SLOT(onChkBoxItalic(bool)));
connect(chkBoxBold,SIGNAL(clicked(bool)),this,SLOT(onChkBoxBold(bool)));
// 关联字体颜色单选按钮与相应槽函数
connect(rBtnBlue,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
connect(rBtnRed,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
connect(rBtnBlack,SIGNAL(clicked()),this,SLOT(setTextFontColor()));
//关联按键选项与对话窗的槽函数实现关闭
connect(btnOK,SIGNAL(clicked()),this,SLOT(close()));
connect(btnCancel,SIGNAL(clicked()),this,SLOT(close()));
connect(btnClose,SIGNAL(clicked()),this,SLOT(close()));
}