1.QAction被点击之后会产生一个triggered信号
- 通过信号与槽的机制能够捕捉对QAction对象的操作
- 项目中可以将多个信号映射到同一个槽函数
2.完善记事本中打开文件、保存文件、另存为功能
在MainWindow.h中加入三个槽函数
public slots:
void onFileOpen(); //打开文件槽函数
void onFileSave(); //保存文件槽函数
void onFileSaveAs(); //另存为槽函数
在MainWindowUI.cpp中添加关联代码:
connect(action, SIGNAL(triggered()), this, SLOT(onFileSaveAs()));
新建MainWindowSlots.cpp,实现具体的槽函数:
#include "MainWindow.h"
#include <QFileDialog>
#include <QDebug>
#include <QFile>
#include <QMessageBox>
#include <QTextStream>
void MainWindow::showErorrMessage(QString message){
QMessageBox msg(this);
msg.setWindowTitle("Error");
msg.setText(message);
msg.setIcon(QMessageBox::Critical);
msg.setStandardButtons(QMessageBox::Ok);
msg.exec();
}
QString MainWindow::showFileDialog(QFileDialog::AcceptMode mode, QString title)
{
QString ret = "";
QFileDialog fd(this); //创建一个文件对话框对象
QStringList filters; //创建一个字符串列表 filters,用来存储文件过滤器
filters.append("Text Files (*.txt)");
filters.append("All Files (*)");
fd.setWindowTitle(title); //设置文件对话框的标题
fd.setAcceptMode(QFileDialog::AcceptOpen); //设置对话框模式为打开文件
fd.setNameFilters(filters);
if( mode == QFileDialog::AcceptOpen )
{
fd.setFileMode(QFileDialog::ExistingFile); //设置文件选择模式:只能选择已存在的单个文件
}
if( fd.exec() == QFileDialog::Accepted ) //如果用户点击了对话框的 "打开" 按钮
{
ret = fd.selectedFiles()[0];
}
return ret;
}
void MainWindow::onFileOpen()
{
QString path = showFileDialog(QFileDialog::AcceptOpen, "Open");
if( path != "" )
{
QFile file(path); //绑定用户选中的第一个文件路径
if( file.open(QIODevice::ReadOnly | QIODevice::Text))
{
//把读取到的文件内容显示到编辑器中
mainEditor.setPlainText(QString(file.readAll()));
file.close();
m_filePath = path;
setWindowTitle("NotePad - [ " + m_filePath + " ]");
}
else{
showErorrMessage(QString("open file error! \n\n") + "\"" + path + "\""));
}
}
}
void MainWindow::onFileSave()
{
if( m_filePath == "" )
{
m_filePath = showFileDialog(QFileDialog::AcceptSave, "Save");
}
if( m_filePath != "" )
{
QFile file(m_filePath);
if( file.open(QIODevice::WriteOnly | QIODevice::Text) )
{
QTextStream out(&file);
out << mainEditor.toPlainText();
file.close();
setWindowTitle("NotePad - [ " + m_filePath + " ]");
}
else{
showErorrMessage(QString("Save file error! \n\n") + "\"" + m_filePath + "\"");
m_filePath = "";
}
}
}
void MainWindow::onFileSaveAs()
{
QString path = showFileDialog(QFileDialog::AcceptSave, "Save As");
if( path != "" )
{
QFile file(path);
if( file.open(QIODevice::WriteOnly | QIODevice::Text) )
{
QTextStream out(&file);
out << mainEditor.toPlainText();
file.close();
m_filePath = path;
setWindowTitle("NotePad - [ " + m_filePath + " ]");
}
else{
showErorrMessage(QString("Save file error! \n\n") + "\"" + path + "\"");
}
}
}