qt day 3

1.完成自定义的记事本文件的保存功能

cpp 复制代码
-------------------------------------------------------------------------
widget.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()
{
    //调用QFontDialog中的成员函数getFont函数来获取系统提供的字体对话框
    bool ok;    //接收用户是否选择字体
    QFont font = QFontDialog::getFont(&ok,QFont("隶书",14,14,0),this,"选择字体");
    if(ok == 1) //选中了字体
    {
        //将字体设置到文本上
        //ui->textEdit->setFont(font);
        //将字体设置到选中文本上
        ui->textEdit->setCurrentFont(font);
    }
    else        //未选中字体
    {
        QMessageBox::information(this,"提示","未选择字体");
    }
}
void Widget::on_colbtn_clicked()
{
    QColor col = QColorDialog::getColor(QColor("black"),this,"颜色选择");
    if(col.isValid())//颜色合法
    {
        //ui->textEdit->setTextColor(col);
        ui->textEdit->setTextBackgroundColor(col);
    }
    else    //颜色不合法
    {
        QMessageBox::information(this,"提示","颜色不合法");
    }
}
void Widget::on_openbtn_clicked()
{
    QString fname = QFileDialog::getOpenFileName(this,
                                                 "选择文件",
                                                 "./",
                                                 "Image File(*.png *.jpg *.bmp);;Text File(*.txt);;All(*.*)");
    if(fname.isNull())
    {
        QMessageBox::information(this,"文件选择","取消选择");
    }
    else
    {
        QFile rf(fname);
        if(!rf.exists())
        {
            return;
        }
        if(!rf.open(QFile::ReadWrite))
        {
            return;
        }
        QByteArray msg = rf.readAll();
        ui->textEdit->setText(msg);
        rf.close();
    }
}
void Widget::on_savebtn_clicked()
{
    QString fname = QFileDialog::getSaveFileName(this,"保存","./","Text File(*.txt);;Image File(*.jpg *.png *.bmp);;All File(*.*)");
    if(fname.isNull())
    {
        QMessageBox::information(this,"文件选择","取消选择");
    }
    else
    {
        QFile wf(fname);
        if(!wf.open(QFile::WriteOnly))
        {
            return;
        }
        QString buf;
        buf = ui->textEdit->toPlainText();
        qDebug() << buf;
        wf.write(buf.toUtf8());
    }
}

2.使用键盘事件实现图片的上下左右移动

cpp 复制代码
-------------------------------------------------------------------------
widget.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::keyPressEvent(QKeyEvent *event)
{
    qDebug() << "键盘按下" << event->text() << "键值为 : " << event->key();

    switch(event->key())
    {
    case 'W':
        ui->label->move(ui->label->x(),ui->label->y()-1);
        if(ui->label->y() <= 0-ui->label->height())
        {
            ui->label->move(ui->label->x(),this->height());
        }
        break;
    case 'S':
        ui->label->move(ui->label->x(),ui->label->y()+1);
        if(ui->label->y() >= this->height())
        {
            ui->label->move(ui->label->x(),0-ui->label->height());
        }
        break;
    case 'A':
        ui->label->move(ui->label->x()-1,ui->label->y());
        if(ui->label->x() <= 0-ui->label->width())
        {
            ui->label->move(this->width(),ui->label->y());
        }
        break;
    case 'D':
        ui->label->move(ui->label->x()+1,ui->label->y());
        if(ui->label->x() >= this->width())
        {
            ui->label->move(0-ui->label->width(),ui->label->y());
        }
    }
}
相关推荐
杨小码不BUG30 分钟前
蛇形舞动:矩阵填充的艺术与算法(洛谷P5731)
c++·算法·矩阵·csp-j/s·循环控制
执尺量北斗41 分钟前
LinkMate 智能会议室系统:基于 Qt / QML / WebRTC / FFmpeg / Whisper / OpenGL 的实时音视频会议平台
qt·ffmpeg·webrtc
草莓熊Lotso1 小时前
《C++ STL list 完全指南:从基础操作到特性对比,解锁链表容器高效用法》
开发语言·c++·list
繁星星繁2 小时前
C++11学习笔记
c++·笔记·学习
Stanford_11067 小时前
如何利用Python进行数据分析与可视化的具体操作指南
开发语言·c++·python·微信小程序·微信公众平台·twitter·微信开放平台
千里马-horse8 小时前
Async++ 源码分析8--partitioner.h
开发语言·c++·async++·partitioner
Lucis__9 小时前
再探类&对象——C++入门进阶
开发语言·c++
北京不会遇到西雅图10 小时前
【SLAM】【后端优化】不同优化方法对比
c++·机器人
jndingxin11 小时前
c++多线程(6)------ 条件变量
开发语言·c++
共享家952711 小时前
QT-常用控件(二)
开发语言·qt