一、定时器
Qt中有两种定时器,分别为QObject定时器和QTimer定时器。
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);
}
效果图:
![](https://img-blog.csdnimg.cn/img_convert/60ae9e341eb7e80a6d55f4b118c965dd.gif)
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()));
}
效果图:
![](https://img-blog.csdnimg.cn/img_convert/bb8a708a80bfbd524851950f0f226159.gif)
二、文件操作
MainWindow
通过创建MainWindow的工程,可以在菜单栏进行菜单编辑,使用&+字母,可以给按键快速命名(在右侧变量名中)
![](https://img-blog.csdnimg.cn/img_convert/eb48644de6087de670c04dfb3db8c758.png)
菜单栏的上的按钮不能使用转到槽的功能,而被当作action,我们可以通过connect函数,将按键动作和槽函数连接,实现相关功能。
b. 文件的打开与保存
使用QFileDialog::getOpenFileName()函数对文件进行打开,共有四个参数,第一个是父类对象,第二个是弹框名称,第三个是默认地址,第四个是文件类型,返回值是所选文件夹路径。
如:QString fileName = QFileDialog::getOpenFileName(this, "选择一个文件",
QCoreApplication::applicationFilePath(),
"*.cpp");
QCoreApplication::applicationFilePath():获取当前文件夹路径,也可以手动输入。
获取到所需文件夹路径后,使用QFile类建立文件变量,将文件变量写入textEdit中即可。
![](https://img-blog.csdnimg.cn/img_convert/46b1d5465870c696f0026a17a6f6942b.png)
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();
}
}