Qt 实例4 文本编辑器

Qt 实现对文本文字的编辑(字体、加粗、倾斜、下划线、颜色、字号)。

1、创建工程并进行界面设计。创建基于QWidget基类的Qt界面应用程序,并在主界面添加相关控件如下:

384482dc80ef4360bbc70fe13da3e7bf.png

界面控件依次为:QLabel、QLineEdit、QPushButton、QComboBox、QToolButton、QToolButton、QToolButton、QToolButton、QComboBox、QTextEdit。

2、创建创建槽函数及类私有函数

.h头文件创建槽函数及类私有函数:

private:
    void ManipulateString();

    void mergeCurrentCharFormat(QTextCharFormat fmt);

private slots:
    void slotReadTxt();

    void slotFontComboBox(QString strFont);

    void slotSizeSpinBox(QString strSize);

    void slotBold();

    void slotItalic();

    void slotUnderline();

    void slotFontColor();

    void slotFormatChanged(const QTextCharFormat &fmt);

.cpp构造函数进行类初始化及槽函数绑定

ui->fontComboBox->setFontFilters(QFontComboBox::ScalableFonts);

QFontDatabase fontDb;

foreach (int size, fontDb.standardSizes()) {
    ui->sizeComboBox->addItem(QString::number(size));
}

ui->boldBtn->setCheckable(true);
ui->italicBtn->setCheckable(true);
ui->underlineBtn->setCheckable(true);

connect(ui->pushButton,SIGNAL(clicked(bool)),this,SLOT(slotReadTxt()));
connect(ui-fontComboBox,SIGNAL(activated(QString)),this,SLOT(slotFontComboBox(QString)));
connect(ui->sizeComboBox,SIGNAL(activated(QString)),this,SLOT(slotSizeSpinBox(QString)));
connect(ui->boldBtn,SIGNAL(clicked(bool)),this,SLOT(slotBold()));
connect(ui->italicBtn,SIGNAL(clicked(bool)),this,SLOT(slotItalic()));
connect(ui->underlineBtn,SIGNAL(clicked(bool)),this,SLOT(slotUnderline()));
connect(ui->colorButton,SIGNAL(clicked(bool)),this,SLOT(slotFontColor()));
connect(ui->textEdit,SIGNAL(currentCharFormatChanged(QTextCharFormat)),this,SLOT(slotFormatChanged(QTextCharFormat)));

3、槽函数及类私有函数实现

void Widget::slotFontComboBox(QString strFont)
{
    QTextCharFormat fmt;
    fmt.setFontFamily(strFont);
    mergeCurrentCharFormat(fmt);
}

void Widget::slotBold()
{
    QTextCharFormat fmt;
    fmt.setFontWeight(ui->boldBtn->isChecked()?QFont::Bold:QFont::Normal);
    mergeCurrentCharFormat(fmt);
}

void Widget::slotItalic()
{
    QTextCharFormat fmt;
    fmt.setFontItalic(ui->italicBtn->isChecked()?true:false);
    mergeCurrentCharFormat(fmt);
}

void Widget::slotUnderline()
{
    QTextCharFormat fmt;
    fmt.setFontUnderline(ui->underlineBtn->isChecked()?true:false);
    mergeCurrentCharFormat(fmt);
}

void Widget::slotSizeSpinBox(QString strSize)
{
    QTextCharFormat fmt;
    fmt.setFontPointSize(strSize.toFloat());
    mergeCurrentCharFormat(fmt);
}

void Widget::slotFontColor()
{
    QColor color = QColorDialog::getColor(Qt::red,this);
    if(color.isValid())
    {
        QTextCharFormat fmt;
        fmt.setForeground(color);
        mergeCurrentCharFormat(fmt);

        QPalette palette;
        palette.setColor(QPalette::ButtonText,color);
        ui->colorButton->setPalette(palette);
    }
}

void Widget::slotFormatChanged(const QTextCharFormat &fmt)
{
    ui->fontComboBox->setCurrentText(fmt.fontFamily());
    //ui->fontComboBox->setCurrentIndex(ui->fontComboBox->findText(fmt.fontFamily()));
    ui->sizeComboBox->setCurrentIndex(ui->sizeComboBox->findText(QString::number(fmt.fontPointSize())));
    ui->boldBtn->setChecked(fmt.font().bold());
    ui->italicBtn->setChecked(fmt.font().italic());
    ui->underlineBtn->setChecked(fmt.font().underline());

    QPalette palette;
    QColor color = fmt.foreground().color();
    palette.setColor(QPalette::ButtonText,color);
    ui->colorButton->setPalette(palette);
}

void Widget::mergeCurrentCharFormat(QTextCharFormat fmt)
{
    QTextCursor cursor = ui->textEdit->textCursor();
    if(!cursor.hasSelection())
        cursor.select(QTextCursor::WordUnderCursor);
    cursor.mergeCharFormat(fmt);
    ui->textEdit->mergeCurrentCharFormat(fmt);
}

4、点击【运行】或【Ctrl+R】运行程序,并点击按钮选取txt文本文件,进行内容读取并展示在文本框中。编辑文本文字:更改字体、加粗、倾斜、下划线、字体颜色、字号等。

fe2b62edd6524208a97de67308d0decb.png

后续公众号会发布系列教程,更多内容请关注公众号:程序猿学习日记

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值