【Qt 示例】代码开发:文本修改器

说明

分享下自己学习 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()));
}
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值