自己跟着老师的课程一步步跟着写下来的,有需要的可以自取,有用的话还希望点一个小小的赞同哦~
视频连接专栏的前几篇文章有,此处就不再冗余的放了(其实就是懒得粘贴链接了~~~)
五、Qt 文件操作
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
#include <QMessageBox>
#include <QDebug>
//#include <QFile>
#include <QKeyEvent>
#include <QMouseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow //MainWindow 继承了 QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void keyPressEvent(QKeyEvent *k); //键盘事件
void mousePressEvent(QMouseEvent *m); //鼠标事件
private:
Ui::MainWindow *ui;
//20230122
private slots:
void NewActionSlot();
void openActionSlot();
void saveActionSlot();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
//#include <QFile>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//20230122
connect(ui->New_action_N,&QAction::triggered,this,&MainWindow::NewActionSlot);
connect(ui->Open_action_O,&QAction::triggered,this,&MainWindow::openActionSlot);
// connect(ui->Save_action_S,SIGNAL(clicked),this,SLOT(saveActionSlot())); //点击后没有反应,按钮可以,应该是这个不可以
connect(ui->Save_action_S,&QAction::triggered,this,&MainWindow::saveActionSlot);
}
MainWindow::~MainWindow()
{
delete ui ;
}
//20230122
void MainWindow::NewActionSlot()
{
ui->textEdit->clear();
this->setWindowTitle("新建文本文档.txt");
}
void MainWindow::openActionSlot()
{
//弹出一个新的对话框(父类对象,新对话框标题,打开文件的路径--Linux中代码为"/home",
//QCoreApplication::applicationFilePath() 获取当前路径
QString filename = QFileDialog::getOpenFileName(this, "选择一个文件", QCoreApplication::applicationFilePath(),"*.cpp");
/*getOpenFileName函数跳出一个窗口*/
if (filename.isEmpty()) //如果文件为空
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else
{
//debug 调试的意思
// qDebug() << filename;
QFile file(filename); //创建文件对象
file.open(QIODevice::ReadOnly); //打开文件,只读
QByteArray ba = file.readAll(); //文件中数据量少的可以适用此函数,
ui->textEdit->setText(QString(ba));//toPlainText:获取textEdit文本的函数
file.close();
}
}
void MainWindow::saveActionSlot()
{
QString fileName = QFileDialog::getSaveFileName(this,"选择一个文件",QCoreApplication::applicationFilePath()); //最后一个参数不写则显示所有文件
// getSaveFileName //可以实现跳出一个新的窗口
if (fileName.isEmpty())
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else
{
QFile file(fileName);
file.open(QIODevice::WriteOnly);
// ui->textEdit->toPlainText();
QByteArray ba;
ba.append(ui->textEdit->toPlainText()); //将QString格式转换为QByteArray格式,并加在ba对象后面
file.write(ba);
file.close();
}
}
/*
* 20230122--p9 事件实现文件保存
键盘和鼠标上的操作都称作 事件 可查:常见的Qt事件类型
捕捉事件并处理 事件都继承于QEvent事件 -- 绘屏事件
任意的 QObject 对象(常见控件)都具备处理Qt事件的能力
*/
void MainWindow::keyPressEvent(QKeyEvent *k) //按下ctrl+S 按键触发事件
{
if (k->modifiers() == Qt::ControlModifier && k->key() == Qt::Key_S)
{
saveActionSlot(); //重写虚函数
}
}
void MainWindow::mousePressEvent(QMouseEvent *m)
{
QPoint pt = m->pos(); //QPoint类可以获取位置
qDebug() << pt;
if(m->button() == Qt::LeftButton)
{
qDebug() << "左键被按下";
}
else if (m->button() == Qt::RightButton)
{
qDebug() << "右键被按下";
}
}