dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QCheckBox>
#include<QRadioButton>
#include<QPushButton>
#include<QPlainTextEdit>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = nullptr);
    ~Dialog();

private:
    Ui::Dialog *ui;
    QCheckBox*chkBoxUnder;
    QCheckBox*chkBoxItalic;
    QCheckBox*chkBoxBold;

    QRadioButton*radioBlack;
    QRadioButton*radioRed;
    QRadioButton*radioBlue;

    QPushButton*btnOK;
    QPushButton*btnCancel;
    QPushButton*btnClose;

    QPlainTextEdit*txtEdit;


    void initUI();
    void initSignalSlots();

private slots:
    void  do_chkBoxUnder(bool checked);
    void  do_chkBoxItalic(bool checked);
    void  do_chkBoxBold(bool checked);
    void setFontColor();//设置字体颜色
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include<QHBoxLayout>
#include<QDebug>
#include<QTextCursor>
#include<QTextCharFormat>
Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    initUI();
    initSignalSlots();
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::initUI()
{
    chkBoxUnder=new QCheckBox("Underline");
    chkBoxItalic=new QCheckBox("Italic");
    chkBoxBold=new QCheckBox("Bold");
    QHBoxLayout*Hlay1=new QHBoxLayout;
    Hlay1->addWidget(chkBoxUnder);
    Hlay1->addWidget(chkBoxItalic);
    Hlay1->addWidget(chkBoxBold);


    radioBlack=new QRadioButton("Black");
    radioBlack->setChecked(true);
    radioRed=new QRadioButton("Red");

    radioBlue=new QRadioButton("Blue");

    QHBoxLayout*Hlay2=new QHBoxLayout;
    Hlay2->addWidget(radioBlack);
    Hlay2->addWidget(radioRed);
    Hlay2->addWidget(radioBlue);

    QHBoxLayout*Hlay3=new QHBoxLayout;
    btnOK=new QPushButton("确定");
    btnCancel=new QPushButton("取消");
    btnClose=new QPushButton("退出");
    Hlay3->addStretch();
    Hlay3->addWidget(btnOK);
    Hlay3->addWidget(btnCancel);
    Hlay3->addStretch();
    Hlay3->addWidget(btnClose);

    txtEdit=new QPlainTextEdit;
    txtEdit->setPlainText("手工创建的");
    QFont font=txtEdit->font();
    font.setPointSize(16);
    txtEdit->setFont(font);

    QVBoxLayout*VLay=new QVBoxLayout(this);
    VLay->addLayout(Hlay1);
    VLay->addLayout(Hlay2);
    VLay->addWidget(txtEdit);
    VLay->addLayout(Hlay3);

    this->setLayout(VLay);

}

void Dialog::initSignalSlots()
{
    //设置颜色的单选按钮
    connect(radioBlue,&QRadioButton::clicked,this,&Dialog::setFontColor);
    connect(radioRed,&QRadioButton::clicked,this,&Dialog::setFontColor);
    connect(radioBlack,&QRadioButton::clicked,this,&Dialog::setFontColor);

    //设置字体的复选框
    connect(chkBoxBold,&QCheckBox::clicked,this,&Dialog::do_chkBoxBold);
    connect(chkBoxItalic,&QCheckBox::clicked,this,&Dialog::do_chkBoxItalic);
    connect(chkBoxUnder,&QCheckBox::clicked,this,&Dialog::do_chkBoxUnder);

    //三个按钮与窗口的槽函数关联
    connect(btnOK,&QPushButton::clicked,this,&Dialog::accept);
    connect(btnCancel,&QPushButton::clicked,this,&Dialog::reject);
    connect(btnClose,&QPushButton::clicked,this,&Dialog::close);
}
void  Dialog::do_chkBoxUnder(bool checked)
{
QFont font;
font.setUnderline(checked);
txtEdit->setFont(font);

}
void  Dialog::do_chkBoxItalic(bool checked)
{
    QFont font;
    font.setItalic(checked);
    txtEdit->setFont(font);
}
void  Dialog::do_chkBoxBold(bool checked)
{
    QFont font;
    font.setBold(checked);
    txtEdit->setFont(font);
}
void Dialog::setFontColor()
{

    // 获取文本编辑控件的光标
        QTextCursor cursor = txtEdit->textCursor();
        QTextCharFormat format;

        // 根据单选按钮选择设置颜色
        if (radioRed->isChecked()) {
            format.setForeground(QBrush(Qt::red));
            qDebug() << "Setting text color to red";
        } else if (radioBlue->isChecked()) {
            format.setForeground(QBrush(Qt::blue));
            qDebug() << "Setting text color to blue";
        } else if (radioBlack->isChecked()) {
            format.setForeground(QBrush(Qt::black));
            qDebug() << "Setting text color to black";
        }

        // 判断是否有选中内容
        if (cursor.hasSelection()) {
            // 如果有选中的内容,应用格式到选中部分
            cursor.mergeCharFormat(format);
        } else {
            // 如果没有选中内容,应用格式到当前光标所在段落
            QTextCursor tempCursor = cursor;
            tempCursor.select(QTextCursor::BlockUnderCursor);
            tempCursor.mergeCharFormat(format);
        }

        // 设置光标回到文本编辑控件中
        txtEdit->setTextCursor(cursor);

}
//设置字体颜色


main.cpp

#include "dialog.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}
最终的效果

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐