2023.06.14 QT day3

news2024/11/27 18:27:09

用QT实现的简单文本编辑器

头文件widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QTextEdit>
#include <QFont>
#include <QFontDialog>
#include <QColor>
#include <QColorDialog>
#include <QFile>
#include <QFileDialog>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
    QPushButton *font_btn;   //字体按钮
    QPushButton *color_btn;  //颜色按钮
    QPushButton *open_btn;   //打开文件
    QPushButton *save_btn;   //保存文件
    QPushButton *clear_btn;  //清空按钮
    QTextEdit *textedit;     //文本编辑器

private slots:
    void font_btn_slot();
    void color_btn_slot();
    void open_btn_slot();
    void save_btn_slot();
    void clear_btn_slot();
};

#endif // WIDGET_H

功能函数widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);

    this->setMinimumSize(640, 480);
    this->setWindowTitle("记事本-zzy");

    //文本编辑器
    textedit = new QTextEdit(this);
    textedit->resize(636, 400);
    textedit->move(2,0);


    //设置字体
    font_btn = new QPushButton("字体", this);
    font_btn->resize(90,40);
    font_btn->move(30, 420);
    connect(font_btn, &QPushButton::clicked, this, &Widget::font_btn_slot);

    //设置颜色
    color_btn = new QPushButton("颜色", this);
    color_btn->resize(90,40);
    color_btn->move(font_btn->x()+120, font_btn->y());
    connect(color_btn, &QPushButton::clicked, this, &Widget::color_btn_slot);

    //打开文件
    open_btn = new QPushButton("打开文件", this);
    open_btn->resize(90,40);
    open_btn->move(color_btn->x()+120, font_btn->y());
    connect(open_btn, &QPushButton::clicked, this, &Widget::open_btn_slot);

    //保存文件
    save_btn = new QPushButton("保存文件", this);
    save_btn->resize(90,40);
    save_btn->move(open_btn->x()+120, font_btn->y());
    connect(save_btn, &QPushButton::clicked, this, &Widget::save_btn_slot);

    //清空文本框
    clear_btn = new QPushButton("清空", this);
    clear_btn->resize(90,40);
    clear_btn->move(save_btn->x()+120, font_btn->y());
    connect(clear_btn, &QPushButton::clicked, this, &Widget::clear_btn_slot);
}

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

//设置字体
void Widget::font_btn_slot()
{
    bool ok;    //判断用户是否选择字体
    QFont font = QFontDialog::getFont(&ok, QFont("宋体", 12), this, "选择字体");
    if(ok)
    {
        textedit->setFont(font);
    }
}

//设置颜色
void Widget::color_btn_slot()
{
    QColor color = QColorDialog::getColor(QColor(255,0,0), this, "选择颜色");
    if(color.isValid())
    {
        //设置选中文本颜色
        textedit->setTextColor(color);
    }
}

//打开文件
void Widget::open_btn_slot()
{
    QString pathName = QFileDialog::getOpenFileName(this, "打开文件", "./", "All(*.*);; Text(*.txt);; C/C++(*.c *.cpp)");

    //判断用户是否选择文件
    if(!pathName.isEmpty())
    {
        //实例化文件对象
        QFile file(pathName);

        //判断文件是否存在
        if(file.exists())
        {
            //打开文件
            file.open(QIODevice::ReadOnly);

            //读取内容
            QByteArray text = file.readAll();
            textedit->setText(QString::fromLocal8Bit(text));

            //关闭文件
            file.close();
        }
    }
}

//保存文件
void Widget::save_btn_slot()
{
    QString pathName = QFileDialog::getSaveFileName(this, "保存文件", "./", "TEXT(*.txt)");

    //实例化文件对象
    QFile file(pathName);

    //打开文件
    file.open(QIODevice::WriteOnly | QIODevice::Truncate);

    //写入数据
    QString text = textedit->toPlainText();
    file.write(text.toLocal8Bit());

    //关闭文件
    file.close();
}

//清空文本框
void Widget::clear_btn_slot()
{
    textedit->clear();
}

运行结果

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言符合类型之结构篇(结构指针)

结构相关知识总结 什么是结构&#xff1f;结构的声明与简单使用结构的初始化结构中成员变量的访问结构的初始化器结构数组结构数组的声明结构数组的成员标识 结构的嵌套结构指针结构作为参数在函数中传递将结构成员作为参数进行传递将结构地址(指向结构的指针)作为参数进行传递…

leetcode 279.完全平方数

题目描述 给你一个整数 n &#xff0c;返回 和为 n 的完全平方数的最少数量 。 完全平方数 是一个整数&#xff0c;其值等于另一个整数的平方&#xff1b;换句话说&#xff0c;其值等于一个整数自乘的积。例如&#xff0c;1、4、9 和 16 都是完全平方数&#xff0c;而 3 和 11 …

cmu db p4

在lab4中实现一个基于 2PL 的并发控制方式&#xff0c;自动为并发事务执行加锁解锁&#xff0c;提供可串行化能力并实现可重复读、读已提交、读未提交三种隔离度 Lock Manager&#xff1a;锁管理器&#xff0c;利用 2PL 实现并发控制。支持 REPEATABLE_READ、READ_COMMITTED 和…

我五年经验,面试官: “不,你是把一年的工作经验用了五年”

最近看到很多软件测试由于公司裁员而需要重新求职的。他们普遍具有4年甚至更长的工作经验。但求职结果往往都不太理想。 我在与部分软件测试求职者交谈的过程中发现&#xff0c;很多人的工作思路不清晰&#xff0c;技能不扎实&#xff0c;没有持续学习的习惯&#xff0c;但对于…

编程(41) ----------线程池

本篇主要提及线程池的相关内容. 依旧是从最基础的含义开始. 什么是线程池? 在计算机中池的是一个很大的概念, 分为很多种. 但无论是什么池, 其核心都是存取相关数据. 线程池也不例外, 即存放线程的池. 其存在意义与线程异曲同工. 线程产生并使用是因为进程太"重"了…

Andriod开发 ViewPager PageTabStrip

1. ViewPager ViewPager常见于APP的引导页或者产品介绍&#xff0c;左右滑动展示不同页面。 ViewPager用PagerAdapter来绑定数据。PagerAdapter是个抽象类&#xff0c;所以需要写一个子类来实现它。 xml: <?xml version"1.0" encoding"utf-8"?> …

设计模式(十五):行为型之命令模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 设计模式…

I2C与I3C

Improved Inter Integrated Circuit &#xff0c;是 MIPI&#xff08;Mobile Industry Processor Interface&#xff09;移动产业处理器接口联盟推出的改进型 i2c (Inter-Integrated Circuit Bus)总线接口。 I3C Introduction I3C &#xff1a;Improved Inter Integrated Cir…

CoreDX DDS应用开发指南(10)通信状态Communication Status

13 Communication Status通信状态 DDS基础设施跟踪与数据通信相关的许多状态和统计信息。应用程序可以选择了解这些状态和统计信息中的一些、全部或全部。 每个DDS实体都有其相关状态,如表13-1所示。 一些通信状态与可用于订阅应用程序的数据相关联。这些被称为读取…

Python发展5大方向,5个对应例子让你更清晰的认知Python!

目录 前言1.数据分析相关路线&#xff1a;案例&#xff1a;使用Python进行股票数据分析 2.人工智能学习路线&#xff1a;案例&#xff1a;使用Python进行图像识别 3.Web开发学习路线&#xff1a;案例&#xff1a;使用Python和Django开发博客网站 4.科学计算学习路线&#xff1a…

(小甲鱼python)类和对象(III)总结 类的继承---构造函数、重写、钻石继承、super()函数

一、基础复习 1.类和对象&#xff08;I&#xff09;总结 类的定义、self的用法 2.类的继承(II)、类的判断isinstance()、issubclass()、多重继承、类的组合 3.类和对象&#xff08;III&#xff09;总结 类的绑定&#xff0c;self&#xff0c;__dict__的妙用 二、类的继承 1.…

4.4.2 译码器

1. 学习基础知识&#xff1a;首先&#xff0c;我会了解译码器的基本概念、原理和应用。通过阅读教科书、参考资料或在线资源&#xff0c;我会学习译码器的工作原理、不同类型的译码器以及它们在电子系统中的应用场景。 2. 研究示例和练习题&#xff1a;为了更好地理解译码器的…

12、Nginx高级之高级模块(secure_link/secure_link_md5)

一、功能 防盗链&#xff1b; ngx_http_secure_link_module模块用于检查所请求链接的真实性&#xff0c;保护资源免受未经授权的访问&#xff0c;并限制链接寿命。 该模块提供两种可选的操作模式。 第一种模式由 secure_link_secret 指令启用&#xff0c;用于检查所请求链接的真…

【Python爬虫开发基础⑤】HTML概述与基本标签详解

专栏&#xff1a;python网络爬虫从基础到实战 欢迎订阅&#xff01;近期还会不断更新~ 往期推荐&#xff1a; 【Python爬虫开发基础①】Python基础&#xff08;变量及其命名规范&#xff09; 【Python爬虫开发基础②】Python基础&#xff08;正则表达式&#xff09; 【Python爬…

出境游复苏加速,距离“回到过去”还有多远?

6月14日一早&#xff0c;日本驻华大使馆一则“自6月19日起正式签发电子签证”的消息&#xff0c;引起了旅游圈的广泛关注。尽管其电子签方案因为流程繁琐甚至超过纸质签证&#xff0c;收获了一片吐槽之声&#xff0c;但游客对出境游的期待&#xff0c;却实打实地得到了展现。 …

solr快速上手:整合SolrJ实现客户端操作(九)

0. 引言 我们前面学习了solr的服务端基础操作&#xff0c;实际项目中我们还需要在客户端调用solr&#xff0c;就像调用数据库一样&#xff0c;我们可以基于solrJ来实现对solr的客户端操作 1. SolrJ简介 SolrJ 是 Solr官方提供的 Java 客户端库&#xff0c;主要用于与 Solr 服…

【Java学习记录-8】集合

集合 特点结构Collection概述创建方式常用方法遍历方式 List概述遍历方式特有方法 特点 提供一种存储空间可变的存储类型&#xff0c;存储的数据容量可以随时发生改变 结构 Collection 概述 是单列集合的顶层接口&#xff0c;它表示一组对象&#xff0c;这些对象也称为Coll…

好用的生产型企业ERP系统有哪些?

一、好用的生产型企业ERP系统有哪些&#xff1f; 目前而言&#xff0c;制造型想要部署一款好用的ERP系统&#xff0c;通常可以从2个方向来考虑&#xff1a; 第一方向&#xff1a;传统IT软硬件。比如&#xff1a;传统ERP厂商SAP&#xff1b; 第二方向&#xff1a;与新一代数字…

基于Java人才招聘网站系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

函数参数的拓展

函数参数的默认值 C 中可以在函数声明时为参数提供一个默认值 当函数调用时没有提供默认参数的值&#xff0c;则使用默认值 参数的默认值必须在函数声明中指定 当函数声明时没有出现参数的默认值&#xff0c;而定义的时候出现参数的默认值&#xff0c;编译器会报错 当函数声…