打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Qt项目——文本编辑器

文章目录

项目展示

项目链接

https://download.csdn.net/download/weixin_45525272/16648942

项目构成

创建好页面设计类名为qwmainwindow,基类选择QWMainWind,在main.cpp中编写显示主窗口的代码

main.cpp

#include "qwmainwind.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWMainWind w;
    w.show();

    return a.exec();
}

之后进入设计师编辑界面,可以自行设置任务栏



也可以添加工具栏

提示就是悬浮时候的小解释提示,像这个样子


当页面设计好后就是这个样子

好了,撸代码

qwmainwind.h

这些信号和槽都是在设计页面右键转到槽直接实现的

#ifndef QWMAINWIND_H
#define QWMAINWIND_H

#include    <QMainWindow>
#include    <QLabel>
#include    <QProgressBar>
#include    <QSpinBox>
#include    <QFontComboBox>

namespace Ui {
class QWMainWind;
}

class QWMainWind : public QMainWindow
{
    Q_OBJECT

private:
    QString     fCurFileName;//当前文件名
    QLabel      *fLabCurFile;//状态栏里显示当前文件的Label
    QProgressBar    *progressBar1;//状态栏上的进度条

    QSpinBox        *spinFontSize;//   字体大写
    QFontComboBox   *comboFont;//字体名称


    void    updateCurFile(QString aFile);//更新当前文件名,并更新状态栏提示
    void    iniUI(); //程序设计的UI初始化
    void    iniSignalSlots(); //手工关联信号与槽
    void    createNew();

public:
    explicit QWMainWind(QWidget *parent = 0);
    ~QWMainWind();

private slots:
//UI界面设计生成的槽函数
    void on_actFontBold_triggered(bool checked);  //粗体Action
    void on_actFontItalic_triggered(bool checked); //斜体Action
    void on_actFontUnder_triggered(bool checked);   //下划线Action

    void on_actNew_triggered();//新建文件
    void on_actOpen_triggered();//打开文件

    void on_actFont_triggered();//字体选择对话框

    void on_txtEdit_selectionChanged();  //当前选择的文字发生变化,更新粗体、斜体、下划线3个action的checked状态
    void on_txtEdit_copyAvailable(bool b);//有文字可copy时更新cut,copy的Enable状态

    void on_actToolbarLab_triggered(bool checked); //设置工具栏按钮样式
    //  自定义槽函数
    void on_spinBoxFontSize_valueChanged(int aFontSize);//改变字体大小的SpinBox的响应
    void on_comboFont_currentIndexChanged(const QString &arg1);//FontCombobox的响应,选择字体名称
private:
    Ui::QWMainWind *ui;
};

#endif // QWMAINWIND_H

qwmainwind.cpp

#include "qwmainwind.h"
#include "ui_qwmainwind.h"

#include    <QFile>
#include    <QFileDialog>
#include    <QTextStream>
#include    <QFontDialog>
#include    <QCoreApplication>
#include    <Qlabel>
#include    <QTextCharFormat>


void QWMainWind::updateCurFile(QString aFile)
{//更新当前文件名,并更新状态栏提示
    fCurFileName=aFile;
    fLabCurFile->setText("当前文件:"+fCurFileName);
}

void QWMainWind::iniUI()
{
//状态栏
    fLabCurFile=new QLabel;  //用于显示当前文件名的标签
    fLabCurFile->setMinimumWidth(150);
    fLabCurFile->setText("当前文件:");
    ui->statusBar->addWidget(fLabCurFile);//添加到状态栏

    progressBar1=new QProgressBar;//状态栏上的进度条
    progressBar1->setMaximumWidth(200);//设置组件最大宽度
    progressBar1->setMinimum(5);
    progressBar1->setMaximum(50);
    progressBar1->setValue(ui->txtEdit->font().pointSize());//初始值
    ui->statusBar->addWidget(progressBar1); //添加到状态栏

//工具栏
    spinFontSize = new QSpinBox;// 工具栏上的文字大小 SpinBox
    spinFontSize->setMinimum(5);
    spinFontSize->setMaximum(50);
    spinFontSize->setValue(ui->txtEdit->font().pointSize());//初始值
    spinFontSize->setMinimumWidth(50);//设置组件最小宽度

    ui->mainToolBar->addWidget(new QLabel("字体大小 ")); //不引用的Label无需定义变量
    ui->mainToolBar->addWidget(spinFontSize); //SpinBox添加到工具栏

    ui->mainToolBar->addSeparator(); //工具栏上增加分隔条
    ui->mainToolBar->addWidget(new QLabel(" 字体 "));
    comboFont = new QFontComboBox;//字体名称ComboBox
    comboFont->setMinimumWidth(150); //设置组件最小宽度
    ui->mainToolBar->addWidget(comboFont);//添加到工具栏

    setCentralWidget(ui->txtEdit); //将txtEdit设置为中心组件,自动填充整个工作区
}

void QWMainWind::iniSignalSlots()
{
    //信号与槽的关联,当函数带有参数时,必须写明参数的类型
    connect(spinFontSize,SIGNAL(valueChanged(int)),
            this,SLOT(on_spinBoxFontSize_valueChanged(int)));

    connect(comboFont,SIGNAL(currentIndexChanged(const QString &)),
            this,SLOT(on_comboFont_currentIndexChanged(const QString &)));
}

QWMainWind::QWMainWind(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::QWMainWind)
{
    ui->setupUi(this);
    //    初始化UI设计页面
    iniUI();//手工初始化UI

    iniSignalSlots();//信号与槽关联
}

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

void QWMainWind::on_txtEdit_copyAvailable(bool b)
{//有文字可copy时更新cut,copy的Enable状态
    ui->actCut->setEnabled(b); //能否 cut
    ui->actCopy->setEnabled(b);  //能否copy

    ui->actPaste->setEnabled(ui->txtEdit->canPaste()); //能否paste
}

void QWMainWind::on_actOpen_triggered()
{
    QString curPath,aFileName;
    curPath=QCoreApplication::applicationDirPath(); //获取应用程序的路径

//调用打开文件对话框打开一个文件
    aFileName=QFileDialog::getOpenFileName(this,tr("打开一个文件"),curPath,
                 "C++程序文件(*.cpp);;H头文件(*.h);;文本文件(*.txt);;所有文件(*.*)");

    if (!aFileName.isEmpty())
    {
        QFile aFile(aFileName);  //以文件方式读出
        if (aFile.open(QIODevice::ReadWrite | QIODevice::Text))
        {
            QTextStream aStream(&aFile); //用文本流读取文件
            while (!aStream.atEnd())
                ui->txtEdit->append(aStream.readLine()); //读取一个文本行
            updateCurFile(aFileName); //更新状态栏显示
        }
        aFile.close();
    }
}

void QWMainWind::on_actFont_triggered()
{
    bool    ok;
    QFont font = QFontDialog::getFont(&ok, this);
    if (ok)
        ui->txtEdit->setFont(font);

}

void QWMainWind::on_actNew_triggered()
{//新建文件
    ui->txtEdit->clear();
    updateCurFile("");
}

void QWMainWind::on_spinBoxFontSize_valueChanged(int aFontSize)
{//改变字体大小的SpinBox的响应
    QTextCharFormat fmt;
    fmt.setFontPointSize(aFontSize); //设置字体大小
    ui->txtEdit->mergeCurrentCharFormat(fmt);
    progressBar1->setValue(aFontSize);
}

void QWMainWind::on_comboFont_currentIndexChanged(const QString &arg1)
{//FontCombobox的响应,选择字体名称
    QTextCharFormat fmt;
    fmt.setFontFamily(arg1);//设置字体名称
    ui->txtEdit->mergeCurrentCharFormat(fmt);
}


void QWMainWind::on_actToolbarLab_triggered(bool checked)
{
    if (checked)  //显示文字和图标
        ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    else //只显示图标
        ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly);
}

void QWMainWind::on_actFontBold_triggered(bool checked)
{
    QTextCharFormat fmt; //格式
    fmt=ui->txtEdit->currentCharFormat();//获取当前选择文字的格式

    if (checked) // 相当于调用ui->actFontBold->isChecked();读取Action的check状态
        fmt.setFontWeight(QFont::Bold);
    else
        fmt.setFontWeight(QFont::Normal);

    ui->txtEdit->mergeCurrentCharFormat(fmt);
}

void QWMainWind::on_actFontItalic_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt=ui->txtEdit->currentCharFormat();
    fmt.setFontItalic(checked);
    ui->txtEdit->mergeCurrentCharFormat(fmt);
}

void QWMainWind::on_actFontUnder_triggered(bool checked)
{
    QTextCharFormat fmt;
    fmt=ui->txtEdit->currentCharFormat();
    fmt.setFontUnderline(checked);
    ui->txtEdit->mergeCurrentCharFormat(fmt);
}


void QWMainWind::on_txtEdit_selectionChanged()
{//当前选择的文字发生变化,更新粗体、斜体、下划线3个action的checked状态
    QTextCharFormat fmt;
    fmt=ui->txtEdit->currentCharFormat(); //获取文字的格式

    ui->actFontItalic->setChecked(fmt.fontItalic()); //是否斜体
    ui->actFontBold->setChecked(fmt.font().bold()); //是否粗体
    ui->actFontUnder->setChecked(fmt.fontUnderline()); //是否有下划线
}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
用QT/C++写一个简易文本编辑器
<QT>自定义标题栏拖放/最大化/最小化/关闭窗口功能
C++:利用C++语言实现约瑟夫环问题——利用函数嵌套+交互式实现n只猴子选猴王
剑指offer之调整数组顺序使奇数位于偶数前面
C#基础知识学习之 ✨ 委托的兄弟姐妹们 delegate、Action、Func、Predicate
面试官居然让我手撕大一课设代码?那offer还不是手到擒来?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服