QT——定时器和文件操作学习笔记

一、定时器

Qt中有两种定时器,分别为QObject定时器和QTimer定时器。

  1. QObject定时器

Qt中大部分控件都继承与QObject类,而QObject中的内置函数

startTimer(定时时间)打开定时器

killTimer(timerID)来停止定时器

重新构建函数timerEvent(QTimerEvent *event)来执行定时器任务

使用pixmap显示图片

步骤1:创建QPixmap格式变量,QPixmap pix("C:\\Users\\Pictures\\test\\1.jpg")

步骤2:使用setPixmap()设置内容,ui->label->setPixmap(pix);

构建相册实例中widget.cpp中的代码如下

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

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

    picID = 2;

    QPixmap pix("C:\\Users\\Pictures\\test\\1.jpg");//改成自己图片所在的路径
    ui->label->setPixmap(pix);

}

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


void Widget::on_startButton_clicked()
{
    myTimerId = this->startTimer(TIMEOUT);
}

void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == myTimerId)
    {
        QString path("C:\\Users\\Pictures\\test\\");
        path += QString::number(picID);
        path += ".jpg";

        QPixmap pix(path);
        ui->label->setPixmap(pix);

        if(++picID == 6)
            picID = 1;
    }

}

void Widget::on_stopButton_clicked()
{
    this->killTimer(myTimerId);
}

效果图:

b. QTimer定时器

使用QTimer中的timer.start(定时时间)开启定时,定时满之后,会发出一个QTimer::timeout信号,通过connect()与槽函数相连,从而完成事件的发生

使用结束后,通过timer.stop()关闭定时器

并且可以通过QTimer中的静态成员变量singleShot()进行定时器单次执行

使用QImage显示图片

步骤1:创建QImage格式变量,

QImage img;

img.load("C:\\Users\\Pictures\\test\\1.jpg");

步骤2:使用setPixmap()设置内容,ui->label->setPixmap(QPixmap::fromImage(img));

构建相册实例中widget.cpp中的代码如下

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

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

    timer = new QTimer;
    picID = 2;

    QImage img;
    img.load("C:\\Users\\Pictures\\test\\1.jpg");
    ui->label->setPixmap(QPixmap::fromImage(img));

    connect(timer, &QTimer::timeout, this, &Widget::timeoutSlot);
}

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


void Widget::on_startButton_clicked()
{
    timer->start(TIMEOUT);
}

void Widget::timeoutSlot()
{
    QString path("C:\\Users\\Pictures\\test\\");
    path += QString::number(picID);
    path += ".jpg";

    QImage img;
    img.load(path);
    ui->label->setPixmap(QPixmap::fromImage(img));

    if(++picID == 6)
        picID = 1;

}


void Widget::on_stopButton_clicked()
{
    timer->stop();
}


void Widget::on_pushButton_clicked()
{
    QTimer::singleShot(TIMEOUT, this, SLOT(timeoutSlot()));
}

效果图:

二、文件操作

  1. MainWindow

通过创建MainWindow的工程,可以在菜单栏进行菜单编辑,使用&+字母,可以给按键快速命名(在右侧变量名中)

菜单栏的上的按钮不能使用转到槽的功能,而被当作action,我们可以通过connect函数,将按键动作和槽函数连接,实现相关功能。

b. 文件的打开与保存

使用QFileDialog::getOpenFileName()函数对文件进行打开,共有四个参数,第一个是父类对象,第二个是弹框名称,第三个是默认地址,第四个是文件类型,返回值是所选文件夹路径。

如:QString fileName = QFileDialog::getOpenFileName(this, "选择一个文件",

QCoreApplication::applicationFilePath(),

"*.cpp");

QCoreApplication::applicationFilePath():获取当前文件夹路径,也可以手动输入。

获取到所需文件夹路径后,使用QFile类建立文件变量,将文件变量写入textEdit中即可。

    QString fileName = QFileDialog::getOpenFileName(this, "选择一个文件",
                                 QCoreApplication::applicationFilePath(),
                                 "*.txt");
    if(fileName.isEmpty())
    {
        QMessageBox::warning(this, "警告", "请选择一个文件");
    }
    else
    {
        qDebug() << fileName;
        QFile file(fileName);
        file.open(QIODevice::ReadOnly);
        QByteArray ba = file.readAll();
        ui->textEdit->setText(QString(ba));
        file.close();
    }

文件保存和文件打开类似,使用QFileDialog::getSaveFileName,用法和打开相同,在本次代码中可以混用

    QString fileName = QFileDialog::getSaveFileName(this, "选择一个文件",
                                 QCoreApplication::applicationFilePath());
    if(fileName.isEmpty())
    {
        QMessageBox::warning(this, "警告", "请选择一个文件");
    }
    else
    {
        qDebug() << fileName;
        QFile file(fileName);
        file.open(QIODevice::WriteOnly);
        QByteArray ba;
        ba.append((ui->textEdit->toPlainText()).toStdString());
        file.write(ba);
        file.close();
    }

mainwindow.cpp中全部代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    connect(ui->newAction, &QAction::triggered, this, &MainWindow::newActionSlot);
    connect(ui->openAction, &QAction::triggered, this, &MainWindow::openActionSlot);
    connect(ui->saveAction, &QAction::triggered, this, &MainWindow::saveActionSlot);
}

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

void MainWindow::newActionSlot()
{
   ui->textEdit->clear();
   this->setWindowTitle("新建文本文档.txt");
}

void MainWindow::openActionSlot()
{
    QString fileName = QFileDialog::getOpenFileName(this, "选择一个文件",
                                 QCoreApplication::applicationFilePath(),
                                 "*.txt");
    if(fileName.isEmpty())
    {
        QMessageBox::warning(this, "警告", "请选择一个文件");
    }
    else
    {
        qDebug() << fileName;
        QFile file(fileName);
        file.open(QIODevice::ReadOnly);
        QByteArray ba = file.readAll();
        ui->textEdit->setText(QString(ba));
        file.close();
    }
}

void MainWindow::saveActionSlot()
{
    QString fileName = QFileDialog::getSaveFileName(this, "选择一个文件",
                                 QCoreApplication::applicationFilePath());
    if(fileName.isEmpty())
    {
        QMessageBox::warning(this, "警告", "请选择一个文件");
    }
    else
    {
        qDebug() << fileName;
        QFile file(fileName);
        file.open(QIODevice::WriteOnly);
        QByteArray ba;
        ba.append((ui->textEdit->toPlainText()).toStdString());
        file.write(ba);
        file.close();
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值