QTday3(QT实现文件对话框保存操作、实现键盘触发事件【WASD控制小球的移动】)

news2024/9/20 9:38:49

1.实现文件对话框保存操作

#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()
{
    //调用QFontDialog类中的静态成员函数,getFont函数来调取系统提供的字体对话框
    bool ok;                     //用于接受用户是否选中了字体
    QFont f = QFontDialog::getFont(&ok,                           //返回是否选中字体
                                   QFont("楷书",10,10,false),     //初始字体
                                   this,                         //父组件
                                   "选择字体");                   //对话框标题
    //将选中的字体进行使用
    if(ok)
    {
        //选中了字体,将字体设置到文本上
        //  ui->textEdit->setFont(f);
        ui->textEdit->setCurrentFont(f);

    }
    else
    {
        //没选中字体
        QMessageBox::information(this,"提示","您取消了选择字体");

    }

}


//颜色按钮对应的槽函数
void Widget::on_colorBtn_clicked()
{
    QColor c =  QColorDialog::getColor(QColor("pink"),
                                       this,
                                       "选择颜色");
    //对选中的颜色判断合法性
    if(c.isValid())
    {
        //颜色合法。直接使用即可
        //ui->textEdit->setTextColor(c);
        ui->textEdit->setTextBackgroundColor(c);
    }
    else
    {
        //颜色不合法
        QMessageBox::information(this,"提示","您取消了选择颜色");
    }

}

//打开文件按钮对应的槽函数
void Widget::on_openBtn_clicked()
{
    //调用QFileDialog的静态成员函数getOpenFileName来获取选中文件的路径
    QString fileName = QFileDialog::getOpenFileName(this,           //父组件
                                                    "选择文件",      //对话框标题
                                                    "./",           //起始路径
                                                    "Image File(*.png *.jpg *bmp);;Text File(*.txt);;All(*.*)");    //过滤器
    if(fileName.isNull())
    {
        QMessageBox::information(this,"提示","您取消了选择文件");
        return;
    }

    //输出文件路径
    qDebug() << fileName;

    //1、实例化一个文件对象
    QFile file(fileName);     //使用获取到的文件路径,实例化一个文件对象,后期对文件的操作都是基于该对象

    //2、判断文件是否存在
    if(!file.exists())
    {
        return;
    }

    //3、打开文件
    if(!file.open(QFile::ReadOnly))
    {
        return;
    }

    //4、读取文件中的内容
    QByteArray msg = file.readAll();

    //将内容展示到ui界面
    ui->textEdit->setText(QString::fromLocal8Bit(msg));

    //    //获取文本编辑器中的内容
    //    ui->textEdit->toPlainText();

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

}

void Widget::on_saveBtn_clicked()
{
    //调用QFileDialog的静态成员函数getSaveFileName来获取选中文件的路径
    QString filename = QFileDialog::getSaveFileName(this,                     //父组件
                                                    "保存文件",                //对话框标题
                                                    "./",                     //起始路径
                                                    "all file(*.*);;Text(*.txt);;Image(*.png,*.jpg,*.gif)");   //过滤器
    if(filename.isNull())
    {
        QMessageBox::information(this,"提示","您取消了选择文件");
        return;
    }

    //输出文件路径
    qDebug() << filename;

    //文件操作
    QFile file(filename);          //使用获取到的文件路径,实例化一个文件对象,后期对文件的操作都是基于该对象

    //打开文件
    if(!file.open(QFile::Append))
    {
        return;
    }

    //获取textEdit中的内容
    QString msg = ui->textEdit->toPlainText();

    //将textEdit中的内容写入到filename中
    file.write(msg.toLocal8Bit());

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

}

 

2.实现键盘触发事件(WASD控制小球的移动)

#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::keyPressEvent(QKeyEvent *event)
{
    //    qDebug() << "键盘被按下了!" << event->text() <<  "键值为:" << event->key();
    switch(event->key())
    {
    case 'W' :
    {
        if(ui->label->y() <= 0-ui->label->height())
        {
            ui->label->move(ui->label->x(),this->height());
        }
        ui->label->move(ui->label->x(),ui->label->y()-10);
    }
        break;
    case 'S' :
    {
        if(ui->label->y() >= this->height())
        {
            ui->label->move(ui->label->x(),0);
        }
        ui->label->move(ui->label->x(),ui->label->y()+10);
    }
        break;
    case 'A' :
    {
        if(ui->label->x() <= 0-ui->label->width())
        {
            ui->label->move(this->width(),ui->label->y());
        }
        ui->label->move(ui->label->x()-10,ui->label->y());
    }
        break;
    case 'D' :
    {
        if(ui->label->x() >= this->width())
        {
            ui->label->move(0,ui->label->y());
        }
        ui->label->move(ui->label->x()+10,ui->label->y());
    }
        break;


    }

}

//键盘抬起事件处理函数的定义
void Widget::keyReleaseEvent(QKeyEvent *event)
{

}

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

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

相关文章

Java的23种设计模式

Java的23种设计模式 一、创建型设计模式1.单例模式 singleton1.1.静态属性单例模式1.2 静态属性变种1.3 基础的懒汉模式1.4 线程安全的懒加载单例1.5 线程安全的懒加载 单例-改进1.6 双重检查锁1.7 静态内部类1.8 枚举单例1.9 注册表单例 2.工厂方法模式 factory3.抽象工厂模式…

Error:Java:无效的源发行版:14

问题描述&#xff1a;项目拉下来&#xff0c;跑的时候发现版本有问题。这个问题可好解决了&#xff0c;只需要看下面几个方面&#xff0c;然后让他们保持一致就OK了 step1&#xff1a;查看本地的jdk版本 打开cmd窗口&#xff0c;输入命令 java -version就可以查看到本地的jdk版…

dji uav建图导航系列(三)模拟建图、导航

前面博文【dji uav建图导航系列()建图】、【dji uav建图导航系列()导航】 使用真实无人机和挂载的激光雷达完成建图、导航的任务。 当需要验证某一个slam算法时,我们通常使用模拟环境进行测试,这里使用stageros进行模拟测试,实际就是通过模拟器,虚拟一个带有传感器(如…

如何一键批量查询全部物流信息?

在日常工作中&#xff0c;快递物流信息的查询是一项常规任务。然而&#xff0c;这个过程往往既耗时又费力&#xff0c;尤其是在面对大量单号的情况下。为了解决这个问题&#xff0c;我们推荐使用固乔快递查询助手&#xff0c;一款能够快速、准确地查询快递物流信息的软件。 首先…

【线程池】如何判断线程池中的任务执行完毕(三)

目录 前言 1. isTerminated()方法 2. awaitTermination()方法 3.getTaskCount()方法和executor.getCompletedTaskCount()方法结合使用 4.使用CountDownlatch类 前言 通常我们使用线程池的时候&#xff0c;系统处于运行的状态&#xff0c;而线程池本身就是主要为了线程复用&…

CVE-2023-23752:Joomla未授权访问漏洞复现

CVE-2023-23752&#xff1a;Joomla未授权访问漏洞复现 前言 本次测试仅供学习使用&#xff0c;如若非法他用&#xff0c;与本文作者无关&#xff0c;需自行负责&#xff01;&#xff01;&#xff01; 一.Openfire简介 Joomla是一个免费的开源内容管理系统&#xff08;CMS&a…

Java for循环每次都通过list.size()和 string.length()获取大小性能

有人说在for循环之前用一个局部变量先获取到list.size()、str.length()&#xff0c;然后在for循环的判断条件里通过这个局部变量替换list.size()、str.length()会节省数据计算的时间。事实真的是这样吗&#xff1f;下面就为大家解答这个问题。 说明&#xff1a;此文章针对Andro…

打造成功的砍价营销大解析,销量飙升

砍价活动是吸引顾客的一种有效方式&#xff0c;可以帮助提高销量和提升品牌知名度。在乔拓云平台上&#xff0c;我们提供了一套简单易用的工具&#xff0c;让您能够轻松地制作一个成功的砍价活动。下面&#xff0c;我将详细介绍具体步骤&#xff0c;让您能够轻松上手。 第一步&…

港联证券|4%!央行宣布:降准!新股大涨138%,再现触发临停!

煤炭领涨两市&#xff0c;多股有望继续高份额分红。 沪指早间冲高后有所回落&#xff0c;上证50盘中一度涨超1%&#xff0c;保险、银行等大金融板块拉升。食品、乳业、白酒、零售等大消费板块全线拉升&#xff0c;半导体芯片股走低&#xff0c;泰凌微跌超10%&#xff0c;寒武纪…

8个神奇的UI设计工具,小白也可轻松上手

随着设计工作的不断发展&#xff0c;市面上好用的设计工具也丰富起来&#xff0c;今天本文共整理了8个好用的设计工具&#xff0c;可以充分满足设计师对设计工具使用的需求&#xff0c;接下来就一起来看看吧&#xff01; 1、即时设计 即时设计是一个面向个人设计师和中小型设…

考前冲刺上岸浙工商MBA的备考经验分享

2023年对于许多人来说都是不平凡的一年&#xff0c;历经三年的抗争&#xff0c;我们终于成功结束了疫情。而我也很幸运的被浙工商MBA项目录取&#xff0c;即将开始全新的学习生活。身为一名已在职工作6年的人&#xff0c;能够重回校园真是一种特别令人激动的体验。今天&#xf…

极致内卷的中国电商路在何方?

2023年上半年最大的价值在于终于找到了确定性&#xff1a;1&#xff0c;消费仍然在增长是确定的&#xff0c;只是增速不再那么高&#xff1b;2&#xff0c;必须从“流量”转向做“留量”是确定的&#xff0c;无论是互联网还是传统消费领域&#xff0c;所有企业都在强调做单客运…

游戏发行商能够提供什么服务?

游戏发行商可以为游戏开发者提供广泛的服务&#xff0c;以帮助他们将游戏成功地引入市场并取得更好的业绩。以下是游戏发行商可能提供的一些服务&#xff1a; 市场营销和宣传&#xff1a;发行商通常具有丰富的市场营销经验&#xff0c;可以制定并执行有效的宣传和营销策略。他们…

硬盘数据恢复- 硬盘中文件打开报错的数据恢复案例

硬盘数据恢复环境&故障情况&#xff1a; 某单位重要数据在一台WINDOWS操作系统的PC机上通过网络共享给公司员工使用。这台PC同时也连接着打印机提供打印服务&#xff0c;很多员工直接将文件拷贝到这台PC上进行打印。该PC机上只有一块500G磁盘。 该PC的F盘分区所有类型文件突…

Effetive STL | 条款2 : 小心对“容器无关代码”的幻想

Effetive STL | 条款2 &#xff1a; 小心对“容器无关代码”的幻想 文章目录 Effetive STL | 条款2 &#xff1a; 小心对“容器无关代码”的幻想STL 容器特点推行自己的容器容器能力的交集 封装Method1: typedefMethod2: class>>>>> 欢迎关注公众号【三戒纪元】…

大数据学习:kafka-producer源码分析

kafka-producer源码分析 kafka-1.0.1源码下载地址 一.kafka发送示例 /*** Created by XiChuan on 2021/6/7.*/ public class ProducerTest {public static void main(String[] args) throws Exception {KafkaProducer<String, String> producer createProducer();JSO…

企业为什么需要IM “定制化”?

企业内外部的信息交流作为一种刚需&#xff0c;证明了企业级 IM 市场稳定可靠且前景十足的商业价值。不过&#xff0c;标准化的企业 IM 产品由于定制化能力不足&#xff0c;容易形成封闭的产品生态&#xff0c;对于企业管理者的吸引力正逐渐减弱。 WorkPlus作为一个企业数字化…

电子科大软件系统架构设计——系统分析与设计概述(含课堂作业、练习答案)

系统分析与设计概述 信息系统概述 what 信息系统是一种能够完成对业务数据进行采集、转换、加工、计算、分析、传输、维护等信息处理&#xff0c;并能就某个方面问题给用户提供信息服务的计算机应用系统。 组成 信息化基础设施&#xff08;计算机、计算机网络、服务器、系统…

git文件夹内容详解

.git文件夹是Git版本控制系统在项目根目录下创建的隐藏文件夹&#xff0c;包含了Git仓库的所有相关信息。如下是.git文件夹中常见的一些内容及其作用&#xff1a; HEAD&#xff1a;指向当前所在的分支&#xff08;或者是一个特定的提交&#xff09;。 branches&#xff1a;存储…

SoftwareTest1 - 打破你对软件测试的偏见

软件测试答疑篇 一 . 什么是软件测试二 . 软件测试和软件开发的区别2.1 难易程度2.2 工作环境2.3 薪水("钱"景)2.4 繁忙程度2.5 测试和研发中调试的区别 三 . 软件测试岗位四 . 软件测试人员应该具备的素质4.1 综合能力4.2 优秀的测试用例设计能力4.3 掌握自动化测试…