文件操作
1.找到文件位置:
返回一个文件的绝对路径=QFileDialog::getOpenFileName(父类对象,框名,显示的路径, 显示的文件的类型)
cpp
QString fileName = QFileDialog::getOpenFileName(this,"打开",QCoreApplication::applicationFilePath(),"*.cpp");
2.创建文件对象
cpp
QFile file(fileName)
3.打开文件
cpp
file.open(QIODevice::打开方式);
4.操作
读文件: QByteArray类写道的位置 = file.readAll(文件对象)
写文件:file.write(写的内容);
5.关闭文件
cpp
file.close();
做编辑器
做一个有新建、打开、保存功能的文本编辑器。
UI部分
mainwindow的UI部分,比widget多一个在这里输入(菜单栏部分)
快捷键预览UI:alt+shift+r

拖一个text edit选垂直布局,自动占满:

菜单栏下拉:&+字母
下拉这里的操作不能直接右键转到槽,所以需要在代码中自己写connect,连接信号与槽。

mainwindow.h
声明槽函数(新建、打开、保存)。
cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QFileDialog>
#include<QMessageBox>
#include<QDebug>
#include<QFile>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void newActionSlot();//处理new的槽函数
void openActionSlot();
void saveActionSlot();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
手动连接槽函数:
&QAction::triggered是单击信号
cpp
connect(ui->action_N,&QAction::triggered,this,&MainWindow::newActionSlot);
connect(ui->action_O,&QAction::triggered,this,&MainWindow::openActionSlot);
connect(ui->action_S,&QAction::triggered,this,&MainWindow::saveActionSlot);
新建槽
清空当前ui,原始名叫新建文本文档.txt
cpp
void MainWindow::newActionSlot()
{
ui->textEdit->clear();//清空当前的编辑部分
this->setWindowTitle("新建文本文档.txt");//ui框叫新建文本文档.txt
}
打开槽(读文件)
取文件地址
如果为空:
警告warning没取到
否则:
打开文件file,
打开方式
读文件信息到ba
写ba到ui中
关闭文件
cpp
void MainWindow::openActionSlot()
{
//打开一个选文件的框
QString fileName = QFileDialog::getOpenFileName(this,"打开",QCoreApplication::applicationFilePath(),"*.cpp");
if(fileName.isEmpty())//返回空则没选到文件
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else
{
QFile file(fileName);//创建文件对象
file.open(QIODevice::ReadOnly);//只读打开文件
QByteArray ba = file.readAll();//读取文件信息,存到ba里面
ui->textEdit->setText(QString(ba));//在UI中的textEdit中显示文本ba中的内容
file.close();
}
}
保存槽
取文件地址filename
如果为空:
警告
否则:
打开(filename)的文件file
在ui框里面写的追加到ba
file写ba
关闭文件
cpp
void MainWindow::saveActionSlot()
{
QString fileName = QFileDialog::getSaveFileName(this,"选择一个文件",QCoreApplication::applicationFilePath());
if(fileName.isEmpty())
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else
{
//得到文件地址,打开方式
QFile file(fileName);
file.open(QIODevice::WriteOnly);
QByteArray ba;
ba.append(ui->textEdit->toPlainText().toUtf8());
file.write(ba);
file.close();
}
}
事件
键盘、鼠标、拖放、滚轮、绘屏、定时......都是事件
QMouseEvent
(鼠标事件)、QKeyEvent
(键盘事件)、QResizeEvent
(窗口大小变化事件)等,均继承自基类QEvent
。
常见的事件
-
鼠标事件(QMouseEvent):
鼠标按下(
mousePressEvent
)、释放(mouseReleaseEvent
)、移动(mouseMoveEvent
)、双击(mouseDoubleClickEvent
)等。 -
键盘事件(QKeyEvent):
按键按下(
keyPressEvent
)、释放(keyReleaseEvent
),可获取按键值(如Qt::Key_Enter
)。 -
窗口事件(QResizeEvent、QMoveEvent 等):
窗口大小变化(
resizeEvent
)、位置移动(moveEvent
)、关闭(closeEvent
)等。 -
定时器事件(QTimerEvent):
通过
startTimer(interval)
启动定时器,定时触发timerEvent
。 -
绘图事件(QPaintEvent):
窗口需要重绘时触发(如被遮挡后显示),需在
paintEvent
中实现绘图逻辑(配合QPainter
)。 -
拖放事件(QDragEnterEvent、QDropEvent 等):
处理拖放操作,需开启控件的
setAcceptDrops(true)
。
重写 事件处理函数可以自定义事件处理方法。
例:写ctrl+s保存快捷键
键盘事件的头文件:<QKeyEvent>
键盘按下事件:
cpp
//声明
void keyPressEvent(QKeyEvent *K);
//定义
void MainWindow::keyPressEvent(QKeyEvent *k)
{
//同时按下ctrl+S
if(k->modifiers() == Qt::ControlModifier && k->key()==Qt::Key_S)
{//保存文件的槽函数处理
saveActionSlot();
}
}