Qt入门(五)——文件操作、热键和鼠标的读取(txt窗口的实现)

注意,是选这个MainWindow
一、ui设计
1.1 图像成果
1.2 类名定义
二、代码展示
2.1 MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileDialog>
#include <QMessageBox>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QDebug>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
void keyPressEvent(QKeyEvent *k);
void mousePressEvent(QMouseEvent *m);
~MainWindow();
private slots:
void NewActionSlots();
void OpenActionSlots();
void SaveActionSlots();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
2.2 main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
2.3 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::NewActionSlots);
connect(ui->Openaction,&QAction::triggered,this,&MainWindow::OpenActionSlots);
connect(ui->Saveaction,&QAction::triggered,this,&MainWindow::SaveActionSlots);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::NewActionSlots()
{
ui->textEdit->clear();
this->setWindowTitle("新建文本文档.txt");
}
void MainWindow::OpenActionSlots()
{
QString filename = QFileDialog::getOpenFileName(this,tr("请选择一个文件"),
QCoreApplication::applicationFilePath(),
"*.cpp");
if(filename.isEmpty())
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else {
QFile file(filename);
file.open(QIODevice::ReadOnly);
QByteArray ba = file.readAll();
ui->textEdit->setText(QString(ba));
file.close();
}
}
void MainWindow::SaveActionSlots()
{
QString filename = QFileDialog::getSaveFileName(this,tr("请选择一个文件"),
QCoreApplication::applicationFilePath());
if(filename.isEmpty())
{
QMessageBox::warning(this,"警告","请选择一个文件");
}
else {
QFile file(filename);
file.open(QIODevice::WriteOnly);
QByteArray ba;
ba.append(ui->textEdit->toPlainText());
file.write(ba);
file.close();
}
}
void MainWindow::keyPressEvent(QKeyEvent *k)
{
if(k->modifiers() == Qt::ControlModifier && k->key() == Qt::Key_S)
{
SaveActionSlots();
}
if(k->modifiers() == Qt::ControlModifier && k->key() == Qt::Key_C)
{
NewActionSlots();
}
if(k->modifiers() == Qt::ControlModifier && k->key() == Qt::Key_O)
{
OpenActionSlots();
}
}
void MainWindow::mousePressEvent(QMouseEvent *m)
{
QPoint pt = m->pos();
qDebug()<<pt;
if(m->button() == Qt::LeftButton)
{
qDebug()<<"左键被按下";
}
else if(m->button() == Qt::RightButton)
{
qDebug()<<"右键被按下";
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理