1.题目确定 ******************************************
现在学习不局限于书本上的知识,越来越多的人通过计算机网络论坛学习额外的知识为了能高效的记录学习内容,就需要一个记事本来记录学习内容来替代笔和本子。
2.题目功能确定***************
1.记录文档以txt格式保存
2.创建新文件
3.添加文件
4.保存文件
5.文件另存为
6.设置编辑时的文本字体
7.文件的删除
8.所有被创建文件的显示
9.不同文件的切换
10.程序关闭时的保存
11.程序打开时已存在文件的加载
12.软件的开始编辑前的提示
项目类图 图片在文件夹里自己加下
1.class MainWindow : public QMainWindow显示主窗口
2.class Dialog : public QDialog 显示保存时的提示窗口
3编写代码************************
1.记录文档以txt格式保存
QFile file(newname+".txt");
if(file.open(QIODevice::WriteOnly | QIODevice::Text)){
}
QTextStream out(&file);
out << ui->textEdit->toPlainText();
file.close();
2.创建新文件
void MainWindow::on_new_2_clicked()
{ui->textEdit->setFont(art);
savedialog->newfilediaog();
connect(savedialog,SIGNAL(sendname(QString)),this,SLOT(newdialogslot(QString)));
}
//
void MainWindow::newdialogslot(QString newname){
ui->textEdit->clear();
QFile file(newname+".txt");
if(file.open(QIODevice::WriteOnly | QIODevice::Text)){
}
QTextStream out(&file);
out << ui->textEdit->toPlainText();
file.close();
ui->listwidget11->addItem(newname);
hasstores.push_back(newname);
disconnect(savedialog,SIGNAL(sendname(QString)),this,SLOT(newdialogslot(QString)));
savedialog->close();
}
3.添加文件
//打开新文件,并判断新打开的文件是否已经存在
void MainWindow::on_pushButton_clicked()
{
QFileInfo filename = QFileDialog::getOpenFileName(this,
tr("OpenNewFile"), "/home/", tr("Files (*.txt)"));
//QFileInfo filename(fileName);
qDebug() << filename.fileName().remove(".txt");
if(hasstores.contains(filename.fileName().remove(".txt")))
{QMessageBox::warning(this,tr("文件已存在!"),tr("文件已经被添加过了!!!"),QMessageBox::Yes|QMessageBox::Default,QMessageBox::No|QMessageBox::Escape);
}
else{
ui->listwidget11->addItem(filename.fileName().remove(".txt"));
hasstores.push_back(filename.fileName().remove(".txt"));
}}
4.保存文件
void MainWindow::on_pushButton_2_clicked()
{if(ui->listwidget11->count()==0){
savedialog->show();
//获取保存对话框中的保存文件名,传递给getsavename函数
connect(savedialog,SIGNAL(sendname(QString)),this,SLOT(getsavename(QString)));
}
else{
QFile savefilesss(ui->listwidget11->currentItem()->text()+".txt");
if(savefilesss.exists())
{
if(savefilesss.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream out(&savefilesss);
out << ui->textEdit->toPlainText();
savefilesss .close();
}
}
else
{
savedialog->show();
connect(savedialog,SIGNAL(sendname(QString)),this,SLOT(getsavename(QString)));
}
}
}
5.文件另存为
//保存文件按钮被按下,调用getsavename(QString)实现文件保存
void MainWindow::on_saveas_clicked()
{ QFile savefilesss(ui->listwidget11->currentItem()->text()+".txt");
if(savefilesss.exists())
{
if(savefilesss.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream out(&savefilesss);
out << ui->textEdit->toPlainText();
savefilesss .close();}
savedialog->saveasdiaog();
connect(savedialog,SIGNAL(sendname(QString)),this,SLOT(getsavename(QString)));
}
}
//从新建对话框接收新文件名
void MainWindow::newdialogslot(QString newname){
ui->textEdit->clear();
QFile file(newname+".txt");
if(file.open(QIODevice::WriteOnly | QIODevice::Text)){
}
QTextStream out(&file);
out << ui->textEdit->toPlainText();
file.close();
ui->listwidget11->addItem(newname);
hasstores.push_back(newname);
disconnect(savedialog,SIGNAL(sendname(QString)),this,SLOT(newdialogslot(QString)));
savedialog->close();
}
6.设置编辑时的文本字体
//设置字体按钮被按下,设置字体
void MainWindow::on_pushButton_3_clicked()
{
bool ok;
QFont font = QFontDialog::getFont(
&ok, QFont("Helvetica [Cronyx]", 10), this);
if (ok) {
// the user clicked OK and font is set to the font the user selected
ui->textEdit->setFont(font);
} else {
// the user canceled the dialog; font is set to the initial
// value, in this case Helvetica [Cronyx], 10
}
}
7.文件的删除
右键事件的捕捉
void MainWindow ::contextMenuEvent(QContextMenuEvent *){
QMenu *popMenu = new QMenu(ui->listwidget11); //菜单添加在personInfo_List这个对象里面
QAction *shanchu = new QAction(tr("删除") ,ui->listwidget11); //右键显示的菜单
connect(shanchu, SIGNAL(triggered(bool)) , this , SLOT(shanchu(bool)));
if(ui->listwidget11->itemAt(mapFromGlobal(QCursor::pos())) != NULL) //mapFromGlobal全局位置的映射
{
popMenu->addAction(shanchu); //将菜单标签加载上去显示
}
popMenu->exec(QCursor::pos()); //菜单出现的位置为当前鼠标的位置
delete shanchu;
}
删除文件的实现
void MainWindow::shanchu(bool){
qDebug () << ui->listwidget11->count();
//qDebug () << delename<<"deleanme"<<hasstores[ui->listwidget11->row(ui->listwidget11->currentItem())];
int r=QMessageBox::question(this,tr("删除!"),tr("是否删除源文件?"),QMessageBox::Yes|QMessageBox::Default,QMessageBox::No|QMessageBox::Escape);
QString delename = ui->listwidget11->currentItem()->text();
if (r==QMessageBox::Yes)
{
//此处写入在窗口关闭时想做的事情
ui->listwidget11->removeItemWidget(ui->listwidget11->currentItem());
ui->listwidget11->takeItem(ui->listwidget11->row(ui->listwidget11->currentItem()));
QFile newdelete(delename+".txt");
newdelete.remove();
//hasstores.removeAt(ui->listwidget11->row(ui->listwidget11->currentItem()));
for(int i=0;i<hasstores.size();i++){
if(delename==hasstores[i])
hasstores.removeAt(i);
}
}
if (r==QMessageBox::No){
for(int i=0;i<hasstores.size();i++){
if(delename==hasstores[i])
hasstores.removeAt(i);
}
ui->listwidget11->takeItem(ui->listwidget11->row(ui->listwidget11->currentItem()));
}
8.所有被创建文件的显示
ui->listwidget11->addItem(newname);
9.不同文件的切换
//设置文件列表中的文件被双击时,切换编辑的文件到当前
void MainWindow::on_listwidget11_doubleClicked(const QModelIndex &index)
{ui->pushButton_2->setEnabled(true);
ui->saveas->setEnabled(true);
ui->textEdit->setEnabled(true);
ui->label->setText("正在编辑:"+ui->listwidget11->currentItem()->text());
ui->textEdit->clear();
QString currentname=ui->listwidget11->currentItem()->text();
qDebug ()<< currentname;
QFile nowfile(currentname+".txt");
if(!nowfile.open(QIODevice::ReadOnly | QIODevice::Text));
QTextStream in(&nowfile);
QString s=in.readAll();
ui->textEdit->setPlainText(s);
nowfile.close();
qDebug () <<ui->listwidget11->row(ui->listwidget11->currentItem());
}
10.程序关闭时的信息保存
关闭事件捕捉
void MainWindow::closeEvent(QCloseEvent *event)
{
int r=QMessageBox::question(this,tr("退出!"),tr("确定退出?"),QMessageBox::Yes|QMessageBox::Default,QMessageBox::No|QMessageBox::Escape);
if (r==QMessageBox::Yes)
{
//此处写入在窗口关闭时想做的事情,调用关闭函数 保存新建的文件到ini文件中
this->closesee();
ui->pushButton_2->click();//再次保存当前文件
event->accept();}
else
event->ignore();
}
void MainWindow::closesee(){
//程序关闭时 保存已经创建的文件信息 为下次文件打开做准备
QSettings settings("exits.ini", QSettings::IniFormat);
settings.beginGroup("DevOption");
settings.setValue("size",hasstores.size());
for(int sizeaaa=0;sizeaaa<hasstores.size();sizeaaa++){
settings.setValue(QString::number(sizeaaa),hasstores[sizeaaa]);
}
settings.endGroup();
}
11.程序打开时已存在文件的加载
this->tocheckfile();//初始化检测已存在的文件,加载已存在的文件
函数实现
void MainWindow::tocheckfile(){
qDebug () <<hasstores.size()<<"jiance 131313";
QFile checkfile("exits.ini");//已存在的文件被存在exits。ini文件中
//如果文件存在,存在的话把存在的文件信息加载到文件列表中显示
if (checkfile.exists()){
//qDebug () << "cunzai "<<hasstores.size();
QSettings settings("exits.ini", QSettings::IniFormat); // 当前目录的INI文件
int size=settings.value("DevOption/size").toInt();
for(int sizeaaa=0;sizeaaa<size;sizeaaa++){
QString status = QString("DevOption/%1")
.arg(sizeaaa);
QString service = settings.value(status).toString();
hasstores.push_back(service);
ui->listwidget11->addItem(service);
}
12.软件的开始编辑前的提示
ui->textEdit->setText("\n\n\n请先双击选择要编辑的文件!!!\n\n文件切换时先保存!!!");
ui->textEdit->setEnabled(false);
ui->pushButton_2->setEnabled(false);
ui->saveas->setEnabled(false);