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();
}
最终的效果![]()