版权声明:本文为博主原创文章,未经博主允许不得转载,欢迎各位道友留言指正,多谢! https://blog.csdn.net/w464960660/article/details/88206129
【目标】:做一个简易记事本,实现练习QFile、QFileDialog、QDir、QTextStream、QFontDialog、QFont、QColorDialog、QColor、QDateTime等类的应用
【心得】:
1、使用某一个功能,在.h文件中加入对应的头文件;
2、对象与对象之间的控制/通信等利用信号与槽来解决很方便,如在主窗口构造函数中加入如下设置字体 :
QObject::connect(ui->fontAction,SIGNAL(triggered()),this,SLOT(setFontSlot()));
3、不知道某一类的用法,选中,按F1可在帮助文档中获取,其中有很多实用的案例;
4、TextEdit功能很强大,直接具备文本编辑等功能,编辑窗口下的undo/redo/copy/paste/selectall/cut 功能直接使用TextEdit自带的方法即可实现,详见代码。
【界面】:
【源码】:
.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("Untitled——notepad");
QObject::connect(ui->newAction,SIGNAL(triggered()),this,SLOT(newFileSlot()));
QObject::connect(ui->openAction,SIGNAL(triggered()),this,SLOT(openFileSlot()));
QObject::connect(ui->saveAction,SIGNAL(triggered()),this,SLOT(saveFileSlot()));
QObject::connect(ui->exitAction,SIGNAL(triggered()),this,SLOT(close()));
QObject::connect(ui->fontAction,SIGNAL(triggered()),this,SLOT(setFontSlot()));
QObject::connect(ui->colorAction,SIGNAL(triggered()),this,SLOT(setColorSlot()));
QObject::connect(ui->dateAction,SIGNAL(triggered()),this,SLOT(currentDateTimeSlot()));
//编辑功能
QObject::connect(ui->undoAction,SIGNAL(triggered()),ui->textEdit,SLOT(undo()));
QObject::connect(ui->redoAction,SIGNAL(triggered()),ui->textEdit,SLOT(redo()));
QObject::connect(ui->copyAction,SIGNAL(triggered()),ui->textEdit,SLOT(copy()));
QObject::connect(ui->cutAction,SIGNAL(triggered()),ui->textEdit,SLOT(cut()));
QObject::connect(ui->pasteAction,SIGNAL(triggered()),ui->textEdit,SLOT(paste()));
QObject::connect(ui->selectallAction,SIGNAL(triggered()),ui->textEdit,SLOT(selectAll()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::newFileSlot()
{
if(ui->textEdit->document()->isModified())
qDebug()<<"curent file modified";
else
qDebug()<<"not modified";
}
void MainWindow::openFileSlot()
{
QString fileName=QFileDialog::getOpenFileName(this,"Open File",QDir::currentPath());
qDebug()<<"fileName is"<<fileName;
if(fileName.isEmpty())
{
QMessageBox::information(this,"Error Message","Please Select a Text File");
return;
}
QFile *file= new QFile;
file->setFileName(fileName); //set file name
bool ok=file->open(QIODevice::ReadOnly); //open file as read only mode
if(ok)
{
//文件与文本流关联
QTextStream in(file);
ui->textEdit->setText(in.readAll());
file->close();
delete file;
}
else
{
QMessageBox::information(this,"Error Message","File OPen Error"+file->errorString());
return;
}
}
void MainWindow::saveFileSlot()
{
qDebug()<<"here";
QString fileName=QFileDialog::getSaveFileName(this,"Save File",QDir::currentPath());
if(fileName.isEmpty())
{
QMessageBox::information(this,"Error Message","Please Select a FIle");
return;
}
QFile *file =new QFile;
file->setFileName(fileName);
bool ok=file->open(QIODevice::WriteOnly);
if(ok)
{
QTextStream out(file);
out<<ui->textEdit->toPlainText(); //转换为纯文本,再重定向至out
file->close();
delete file;
}
else
{
QMessageBox::information(this,"Error Message","Save File Eror");
return;
}
}
void MainWindow::printFileSlot()
{
//QPrintDialog static member call
}
void MainWindow::setFontSlot()
{
bool ok;
QFont font = QFontDialog::getFont(&ok, this);
if (ok)
{
ui->textEdit->setFont(font);
}
else
{
QMessageBox::information(this,"Error Message","Error Set Font!");
return;
}
}
void MainWindow::setColorSlot()
{
QColor color = QColorDialog::getColor(Qt::red, this);
if (color.isValid())
{
ui->textEdit->setTextColor(color);
}
else
QMessageBox::information(this,"Error Message","Color is unvalid");
return;
}
void MainWindow::currentDateTimeSlot()
{
QDateTime current=QDateTime::currentDateTime();
QString time=current.toString("yyyy-M-dd hh:mm:ss");
ui->textEdit->append(time);
}
.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMessageBox>
#include <QDebug>
#include<QFile>
#include<QFileDialog>
#include<QDir>
#include<QTextStream>
#include<QFontDialog>
#include<QFont>
#include<QColorDialog>
#include<QColor>
#include<QDateTime>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
private slots:
void newFileSlot();
void openFileSlot(); //打开一个已经存在的文本文件
void saveFileSlot();//保存文件到磁盘
void printFileSlot();
void setFontSlot();//设置字体的槽
void setColorSlot();//设置字体的颜色
};
#endif // MAINWINDOW_H