QT学习小案例

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值