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());
        }
    }
}
相关推荐
Larry_Yanan8 小时前
Qt多进程(一)进程间通信概括
开发语言·c++·qt·学习
J ..8 小时前
C++ 多线程编程基础与 std::thread 使用
c++
你的冰西瓜9 小时前
C++标准模板库(STL)全面解析
开发语言·c++·stl
闻缺陷则喜何志丹9 小时前
【计算几何】仿射变换与齐次矩阵
c++·数学·算法·矩阵·计算几何
chen_ever9 小时前
Protobuf详解(从安装到实战)
c++·rpc·信息与通信
hmbbcsm9 小时前
python做题小记(八)
开发语言·c++·算法
再睡一夏就好10 小时前
深入Linux线程:从轻量级进程到双TCB架构
linux·运维·服务器·c++·学习·架构·线程
特立独行的猫a10 小时前
C++开发中的Pimpl机制与类声明机制深度解析:现代C++的编译解耦艺术
开发语言·c++·pimpl
GoWjw10 小时前
在C&C++指针的惯用方法
c语言·开发语言·c++