Qt(day3)

2023-11-19

思维导图

小练习 

second.h

#ifndef SECOND_H
#define SECOND_H

#include <QWidget>
#include<QLabel>
#include<QLineEdit>
#include<QPushButton>
#include<QTimerEvent>
#include<QTime>
#include<QTextEdit>
#include<QTextToSpeech>

namespace Ui {
class Second;
}

class Second : public QWidget
{
    Q_OBJECT

public slots:
    void jump_slot();
    void startbtn_slot();
    void endbtn_slot();

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

    void timerEvent(QTimerEvent *event) override;

private:
    Ui::Second *ui;
    QLabel *lab;
    QLineEdit *ledit;
    QPushButton *startbtn;
    QPushButton *endbtn;
    QTextEdit *tedit;

    int timer_id;   //定时器id

    QTextToSpeech *speecher;
};

#endif // SECOND_H

second.cpp

#include "second.h"
#include "ui_second.h"

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

    speecher =new QTextToSpeech(this);  //为播报员实例化空间

    this->setFixedSize(QSize(800,700)); //固定文件框的大小
    this->setWindowTitle("定时器");   //设置文件的标题

    lab=new QLabel(this);   //创建一个lab
    lab->resize(300,220);   //设置lab大小
    lab->move(50,50);       //设置lab的位置
    lab->setStyleSheet("background-color:skyblue;font-weight:bold;font-size:60px;");

    ledit=new QLineEdit(this);  //创建一个ledit
    ledit->resize(300,100);   //设置ledit大小
    ledit->move(lab->x()+400,lab->y());       //设置ledit的位置


    startbtn=new QPushButton(this);  //创建一个startbtn
    startbtn->resize(140,100);   //设置startbtn大小
    startbtn->move(ledit->x(),ledit->y()+120);       //设置startbtn的位置
    startbtn->setText("start");     //设置startbtn的文本

    endbtn=new QPushButton(this);  //创建一个endbtn
    endbtn->resize(140,100);   //设置endbtn大小
    endbtn->move(ledit->x()+160,ledit->y()+120);       //设置endbtn的位置
    endbtn->setText("end");     //设置endbtn的文本

    tedit=new QTextEdit(this);  //创建一个tedit
    tedit->resize(700,300);
    tedit->move(lab->x(),lab->y()+300);


    connect(startbtn,&QPushButton::clicked,this,&Second::startbtn_slot);
    connect(endbtn,&QPushButton::clicked,this,&Second::endbtn_slot);
}

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

void Second::jump_slot(){
    this->show();
}

void Second::startbtn_slot(){
    timer_id=this->startTimer(1000);
}

void Second::endbtn_slot(){
    this->killTimer(timer_id);
}

void Second::timerEvent(QTimerEvent *event){
    QTime sys_t=QTime::currentTime();
    QString t=sys_t.toString("hh:mm:ss");

    if(event->timerId()==timer_id){
        lab->setText(t);
    }
    if(t==ledit->text()){
        speecher->say(tedit->toPlainText());
    }

}

 效果图:

文本编辑器的保存工作

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QFontDialog>      //字体对话框类
#include<QFont>            //字体类
#include<QMessageBox>
#include<QColorDialog>     //颜色对话框类
#include<QColor>           //颜色类
#include<QFileDialog>       //文件对话框类
#include<QDebug>
#include<QFile>              //文件类

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void on_fontBtn_clicked();

    void on_colorBtn_clicked();

    void on_openBtn_clicked();

    void on_saveBtn_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

weight.cpp

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

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

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

//字体按钮对应的槽函数
void Widget::on_fontBtn_clicked()
{
    bool ok;             //返回用户是否选中字体的变量

    //直接调用静态成员函数调出字体对话框
    QFont f =  QFontDialog::getFont(&ok,                           //返回是否选中字体
                         QFont("隶书", 2, 10, false),    //初始字体
                         this,                           //父组件
                         "字体对话框");                      //对话框标题

    //要对ok进行判断,如果用户点击的取消,则ok为false,否则为true
    if(ok)
    {
        //说明用户选中了字体,直接使用字体即可
        //将该字体加载到文本上面
        //ui->textEdit->setFont(f);           //将该组件中的全部字体进行设置新字体

        ui->textEdit->setCurrentFont(f);          //将组件中当前选中的字体进行设置,其余字体不设置

    }else
    {
        //说明用户没有选中字体
        QMessageBox::information(this,"提示","用户没有选中字体");
    }
}

//颜色按钮对应的槽函数
void Widget::on_colorBtn_clicked()
{
    QColor c = QColorDialog::getColor(QColor(0,255,255),    //初始颜色
                                      this,                 //父组件
                                      "选择颜色");          //窗口标题
    //有没有选中颜色
    if(c.isValid())
    {
        //说明该颜色合肥,直接使用
        //ui->textEdit->setTextColor(c);          //设置字体的颜色,前景色

        ui->textEdit->setTextBackgroundColor(c);     //设置字体背景色

    }else
    {
        //说明颜色没有选中
        QMessageBox::information(this,"提示","用户没有选中颜色");
    }
}


//打开文件按钮对应的槽函数
void Widget::on_openBtn_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this,          //父组件
                                                    "选中文件",         //对话框标题
                                                    "./",               //起始路径
                                                    "all(*.*);; Img(*.png *.jpg *.xpm);; 文本(*.txt)");//过滤器

    qDebug()<<fileName;

    //文件操作
    //1、实例化一个文件对象
    QFile file(fileName);          //使用有参构造构造一个文件对象
    if(!file.exists())           //判断文件是否存在
    {
        return;
    }

    //2、打开文件
    if(!file.open(QFile::ReadWrite))       //判断文件是否打开成功
    {
        return;
    }

    //3、从文件中读取数据
    QByteArray msg = file.readAll();

    //4、关闭文件
    file.close();

    //将从文件中读取的内容展示到ui界面上
    ui->textEdit->setText(QString::fromLocal8Bit(msg));

}

//保存按钮对应的槽函数
void Widget::on_saveBtn_clicked()
{
    //获取路径
    QString fileName = QFileDialog::getSaveFileName();

    //实例化文件对象
    QFile file(fileName);
    //打开文件
    if(!file.open(QFile::WriteOnly))
    {
        return;
    }

    //将ui界面上的数据读取下来
    QString msg = ui->textEdit->toPlainText();

    //将信息写入到文件中
    file.write(msg.toLocal8Bit());

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

效果图:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt(day3) 的相关文章

  • 从 QML 实例化 C++ 对象会产生巨大的内存使用开销

    实例化一个QObjectC 堆中的派生类为每个对象提供了大约 160 个字节 通过注册相同的对象qmlRegisterType 用于从 QML 创建并通过以下方式动态创建对象createObject 每个对象给我 2000 多个字节 这是完
  • 如何在 Qt-Embedded 中(正确)输出多语言文本?

    我的目标系统是 linux 3 3 7 Qt Embedded 开源版 4 8 Droid 字体 取自 fonts droid 20111207 git 1 all deb Debian 软件包并复制到 usr lib fonts目录 主要
  • 如何在按下托盘图标菜单操作时执行功能?

    int main int argc char argv QApplication oApp argc argv QAction action1 QMenu menu QSystemTrayIcon TrayIcon QIcon favico
  • QT/QML Android App,点击通知栏时打开应用程序

    我为 Android 应用程序制作了一个 QT 当我单击平板电脑中上面看到的按钮通知栏时 但是 如果单击通知 我的应用程序将打开 聚焦 不知道 并显示黑色窗口 简单来说怎么做呢 我的代码是 package org ays operation
  • Qt:将拖放委托给子级的最佳方式

    我在 QWidget 上使用拖放 我重新实现了 DragEnterEvent dragLeaveEvent dragMoveEvent 和 dropEvent 效果很好 在我的 QWidget 中 我有其他 QWidget 子级 我希望它们
  • QTcpSocket 有时不发送数据

    我有两个 QT 应用程序 一个应用程序可以被认为保存了大数据 它每秒向第二个应用程序发送大约 10 KB 的数据块 之前我尝试使用QUdpSocket来传输数据 但由于MTU限制在2 5K左右 并且需要自己分割和重新组合数据 所以我改用QT
  • PyQt:如何设置组合框项目可检查?

    为了将 GUI 小部件数量保持在最低限度 我需要找到一种方法来为用户提供下拉菜单项的选择 这些菜单项可用于过滤掉 listWidget 项中显示的内容 假设 listWidget 列出了 5 个不同类别的项目 Cat A Cat B Cat
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • 如何将图像显示为缩略图

    我有一个QTreeView显示硬盘驱动器和目录 我也有一个QListView显示图像文件如下 但我想将图像显示为缩略图 如下所示 My code mainWidget mainWidget QWidget parent QWidget pa
  • 使用 Visual Studio 2013 构建 Qt 5.2.1 的静态版本

    几天来我一直在尝试使用 Visual Studio 2013 构建 Qt 的静态版本 我就是不明白我做错了什么 System Windows 7 64 位 Visual Studio 2013 仍安装 Visual Studio 2012
  • 为 Windows 98 编译 Qt

    我需要支持 Windows 98 Qt 文档声称这是可能的 但没有说明 Qt 4 6 的分布式二进制文件不能在 Win98 上运行 而且我采样的大多数 Qt 应用程序也不能在 Win98 上运行 对于几个确实在 98 上运行的应用程序 我询
  • QToolButton:更改菜单位置

    使用菜单时QToolButton菜单显示在按钮的正下方 有没有办法在按钮的左侧 右侧显示菜单 我知道这个问题不久前已得到回答 但我想为此问题添加新答案 因为接受的答案不再有效 实际上 更改 QToolButton 上的菜单位置非常容易 您需
  • 如何在 QTabWidget Qt 中展开选项卡

    我有一个QTabWidget像这个 但我想展开选项卡以 填充 整个小部件宽度 如下所示 我怎样才能做到这一点 我在用Qt 5 3 2 and Qt 创建者 3 2 1 Update 我尝试使用setExpanding功能 ui gt myT
  • Qt 插槽是否与其他代码并行运行?

    在此函数示例中 void MyClass myFunction emit MySignal1 emit MySignal2 如果我有slot1倾听MySignal1 and slot2倾听MySignal2 1 Is slot1总是会在之前
  • 将 gnuplot 嵌入现有 QtWidget 中

    我正在用 C 创建一个 伪 实时绘图应用程序 使用 gnuplot 作为绘图后端 我的要求之一是绘图必须位于现有窗口内 而不是有一个单独的绘图窗口 gnuplot 默认为 Gnuplot 有一个选项可以指定 Qt 小部件 ID 这似乎适合我
  • QML 连接:不推荐使用连接中隐式定义的 onFoo 属性

    升级到 Qt 5 15 时收到以下错误消息 QML Connections Implicitly defined onFoo properties in Connections are deprecated Use this syntax
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • Qt 5.3 无法使 QCompass (QSensor) 在 Windows 8.1 上工作

    我无法让传感器在我的 Asus Transformer T100 上工作 磁力计和指南针无法启动 并且我从加速度计获得假值 始终 x 0 y 9 8 z 0 即使使用我的笔记本电脑 我总是得到相同的结果 第一段文字编辑 Initialisa
  • 如何将 zlib 添加到现有的 qt 安装中

    如何将 zlib 添加到 Qt 的现有安装中 我对此很陌生 所以请给我详细的描述 提前感谢您的帮助 zlib 包含在 Qt 核心库中 如果你想在 Qt 程序中使用 zlib 函数 你只需要包含 src 3rdparty zlib 中的 zl
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L

随机推荐

  • linux下查看redis是否正常运行 和设置密码

    一 查找redis conf文件 我们服务器已经安装了redis 现在通过命令查看下redis的进程 root lnp ps aux grep redis root 7374 0 0 0 0 145312 7524 Ssl 16 37 0
  • Error:(28, 8) java: 类Demo01Array是公共的, 应在名为 Demo01Array.java 的文件中声明

    public 修饰的class类必须与 Java文件名一致 若声明的class非public则文件名无需与类名相同 必须一致
  • Android原生系统真的那么好用吗?安卓原生系统吊打其他系统,因为有Google-Play

    Android原生系统真的那么好用吗 这种问题当然是否定的 原生 Android 指的是直接基于 AOSP 构建的而非手机厂商出厂固件修改的第三方 ROM 但包括 Nexus Pixel 或其它被 Google 直接支持的手机的可能是闭源的
  • 你们所不了解的程序员思维黑洞

    如果你也是程序员 看看你中了几条 1 数数会从 0 开始数起 比如 程序员吵架的时候会说 我数三下 你再不闭嘴 我就不客气了 零 一 二 或者 在列清单的时候 编号会从 0 开始写 为什么会这样 因为 0 是数组的第一个元素 在经过无数次的
  • 1分钟部署自己的AutoGPT

    4 月初 AutoGPT 引发热潮 短短一个多月 它已经在全球最大的开源软件社区 Github 上累积了131 000颗星 其热度依然持续上升 我体验后发现 虽然基于 3 5 模型的 AutoGPT 还无法最终生成完整的报告 但是它确实可以
  • MySQL高级学习笔记(一)

    文章目录 MySQL高级学习笔记 一 1 索引 1 1索引概述 1 2索引优势劣势 1 3索引结构 1 3 1BTREE 结构 1 3 2B TREE 结构 1 3 3MySQL中的B Tree 1 4索引分类 1 5索引语法 1 5 1
  • agplv3_我是否需要根据AGPLv3许可证提供对源代码的访问?

    agplv3 GNU Affero通用公共许可证版本3 AGPLv3 是与GPLv3几乎相同的copyleft许可证 两种许可证具有相同的版权保留范围 但在一个重要方面存在实质性差异 AGPLv3的第13节规定了GPLv2或GPLv3中不存
  • 断点续传----位图

    首先了解什么是位图和他的工作原理 定义 位图就是bitmap的缩写 所谓bitmap 就是用每一位来存放某种状态 适用于大规模数据 该数据都是不重复的简单数据 通常是用来判断某个数据存不存在的 工作原理 查找一个数是否存在 其实答案就是存在
  • Cmake的使用

    简介 CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 能测试编译器所支持的C 特性 类似UNIX下的automake 只是 CMake 的
  • matlab 右侧,matlab错误提示无法执行赋值,因为左侧和右侧的元素数目不同

    compute pdf of fpe corr to Levy noise with absorbing BC in a bounded symmetric domain r r central differencing for 2nd o
  • UE4 UE4 C++ Gameplay Abilities 的AttributeSet和GameplayEffect

    UE4 UE4 C Gameplay Abilities 的AttributeSet和GameplayEffect GAS参考文档 仅是个人理解 参考 AttributeSet是设置玩家属性的比如生命值 最大生命值 GameplayEffe
  • GPU压力测试和故障定位

    压力测试 获取gpu burn https codeload github com wilicc gpu burn zip master 解压缩 unzip gpu burn master zip 进入目录编译 cd gpu burn ma
  • 关于python爬虫的准备工作

    目录 1 什么是网络爬虫 2 准备工作 1 什么是网络爬虫 百度百科所给注释如下 网络爬虫 又称为网页蜘蛛 网络机器人 在FOAF社区中间 更经常的称为网页追逐者 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 另外一些不常使用的
  • vm使用PE安装系统(2)

    接上次教程 vm使用PE安装系统 1 提要 此虚拟机安装方法适用于所有系统格式如ISO ESD GHO WIM等系统格式 第一步 打开DG硬盘分区 选择左侧栏进行的 HD0 右键选择快速分区 一般情况下选择自定义选择两个分区 然后右边内容栏
  • 芯片开发语言的简单区别介绍。Verilog、VHDL、System Verilog、SystemC、Matlab、C/C++等

    芯片开发语言的简单区别介绍 芯片设计前端的流程很长 和芯片前端相关的语言也很多 比如Verilog VHDL System Verilog SystemC Matlab C C 等等 但没有一个语言能够做到适合于整个前端流程 每种语言都有适
  • 【Kubernetes运维篇】零故障升级Pod健康探测详解

    文章目录 一 Pod健康探测介绍 1 三种容器探测方法 2 常用三种探测探针 3 探针相关属性说明 二 探测案例 1 Pod启动探测案例 startupProbe 2 Pod存活探测案例 livenessProbe 3 Pod就绪探测案例
  • QT QComboBox使用详解

    本文详细的介绍了QComboBox控件的各种操作 例如 下拉框添加内容 默认显示 获取下拉框总行数 获取选中索引 获取当前内容 清除列表 重绘下拉框等操作 本文作者原创 转载请附上文章出处与本文链接 QComboBox控件全面详解目录 1
  • RNA 31. SCI文章临床蛋白质组肿瘤在线数据挖掘神器(CPTAC)

    桓峰基因公众号推出转录组分析教程 有需要生信的老师可以联系我们 转录分析教程整理如下 RNA 1 基因表达那些事 基于 GEO RNA 2 SCI文章中基于GEO的差异表达基因之 limma RNA 3 SCI 文章中基于T CGA 差异表
  • 框架学习——带你了解SpringBoot框架

    目录 一 SpringBoot简介 1 1 原有Spring优缺点分析 1 1 1 Spring的优点分析 1 1 2 Spring的缺点分析 1 2 SpringBoot的概述 1 2 1 SpringBoot的特点 1 2 2 Spri
  • Qt(day3)

    思维导图 小练习 second h ifndef SECOND H define SECOND H include