读书人

qt编程兑现的简易记事本(范例)

发布时间: 2012-11-26 11:48:50 作者: rapoo

qt编程实现的简易记事本(范例)
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QFileDialog>#include <QTextStream>#include <QMessageBox>#include <QDialog>#include <QLineEdit>#include <QPushButton>#include <QVBoxLayout>#include <QHBoxLayout>namespace Ui { class MainWindow;}class MainWindow : public QMainWindow{ Q_OBJECTpublic: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void changeTitle(const QString &filename); void openfile(const QString &filename); void savefile(const QString &filename);private: Ui::MainWindow *ui; QString curFile; QLineEdit *find_textLineEdit;private slots: void show_findText(); void on_action_2_triggered();//查找 void on_plan_textEdit_copyAvailable(bool b); void on_plan_textEdit_textChanged(); void on_action_U_triggered();//撤销 void on_action_P_triggered();//粘贴 void on_action_C_triggered();//复制 void on_action_T_triggered();//剪切 void on_actionExit_triggered();//退出 bool on_actionSave_triggered();//保存 bool on_actionSave_As_triggered();//另存为 void on_actionOpen_triggered();//打开 void on_actionNew_triggered();//新建};#endif // MAINWINDOW_H
main.h文件#include <QtGui/QApplication>#include <QTextCodec>#include "mainwindow.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); MainWindow w; w.show(); return a.exec();}
mainwindow.cpp#include "mainwindow.h"#include "ui_mainwindow.h"#include<QDebug>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow){ ui->setupUi(this); this->changeTitle(""); this->setCentralWidget(ui->plan_textEdit); //设置action的属性 ui->action_T->setEnabled(false); ui->action_C->setEnabled(false); //设置界面图标 this->setWindowIcon(QIcon(":/images/editor.png"));}MainWindow::~MainWindow(){ delete ui;}void MainWindow::savefile(const QString &filename){ QFile file(filename); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){ QMessageBox::warning(this, "Save", tr("Save , error ?") .arg(filename) .arg(file.errorString())); return ; } QTextStream out(&file); out << ui->plan_textEdit->toPlainText(); file.close();}void MainWindow::openfile(const QString &filename){ QFile file(filename); if(file.open(QIODevice::ReadOnly | QIODevice::Text)){ QMessageBox::warning(this, "Open", tr("Save , error ?") .arg(filename) .arg(file.errorString())); return ; } QTextStream in(&file); QString s=in.readAll(); ui->plan_textEdit->setPlainText(s);}void MainWindow::changeTitle(const QString &filename){ qDebug()<<"***"<<filename; if(filename.isEmpty()){ this->curFile = ""; this->setWindowTitle(tr("无标题.txt[*]--记事本")); } else{ this->curFile = filename; QFileInfo fi(filename); QString name=fi.fileName(); this->setWindowTitle(tr("%1[*]--记事本").arg(name)); qDebug()<<"===="<<name; } this->setWindowModified(false); ui->plan_textEdit->document()->setModified(false);}void MainWindow::on_actionNew_triggered()//新建{ QTextDocument *document=ui->plan_textEdit->document(); if(!document->isModified()){ ui->plan_textEdit->setPlainText(""); this->changeTitle(""); return ; } int ret=QMessageBox::question(this, "Save?", "disSave, Save", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); switch(ret) { case QMessageBox::Cancel: break; case QMessageBox::Discard: ui->plan_textEdit->setPlainText(""); this->changeTitle(""); break; case QMessageBox::Save: if(!on_actionSave_triggered()) return ; ui->plan_textEdit->setPlainText(""); this->changeTitle(""); break; }}void MainWindow::on_actionOpen_triggered()//打开{ QTextDocument *document=ui->plan_textEdit->document(); if(document->isModified()){ int ret=QMessageBox::question(this, "Save?", "disSave, Save", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); if(ret==QMessageBox::Cancel){ return ; } else if(ret==QMessageBox::Save){ } } //没修改 正常保存 放弃保存 QString filename=QFileDialog::getOpenFileName(this); if(filename.isEmpty()) return ; this->openfile(filename); this->changeTitle(filename);}bool MainWindow::on_actionSave_As_triggered()//另存为{ QString fileName=QFileDialog::getSaveFileName(this,tr("Save File")); if(fileName.isEmpty()) return false; this->savefile(fileName); this->changeTitle(fileName); return true;}bool MainWindow::on_actionSave_triggered()//保存{ if(this->curFile.isEmpty()) // qDebug()<<"+++"; return on_actionSave_As_triggered(); else { savefile(this->curFile); this->setWindowModified(false); } return true;}void MainWindow::on_actionExit_triggered()//退出{ this->close();}void MainWindow::on_action_T_triggered()//剪切{ this->ui->plan_textEdit->cut();}void MainWindow::on_action_C_triggered()//复制{ this->ui->plan_textEdit->copy();}void MainWindow::on_action_P_triggered()//粘贴{ this->ui->plan_textEdit->paste();}void MainWindow::on_action_U_triggered()//撤销{ this->ui->plan_textEdit->undo();}void MainWindow::on_plan_textEdit_textChanged(){ //qDebug()<<"niaho"; this->setWindowModified(true);}void MainWindow::on_plan_textEdit_copyAvailable(bool b){ ui->action_T->setEnabled(b); ui->action_C->setEnabled(b);}//这部分是编码实现的,可以看看与界面设计实现的有什么不一样void MainWindow::on_action_2_triggered()//查找{ QDialog *findDlg=new QDialog(this); findDlg->setWindowTitle(tr("Find!")); find_textLineEdit=new QLineEdit(findDlg); QPushButton *find_Bth=new QPushButton(tr("查找下一个"),findDlg); QHBoxLayout *layout=new QHBoxLayout(findDlg); layout->addWidget(find_textLineEdit); layout->addWidget(find_Bth); findDlg->show(); connect(find_Bth,SIGNAL(clicked()),this,SLOT(show_findText()));}void MainWindow::show_findText(){ QString findText=find_textLineEdit->text(); if(!ui->plan_textEdit->find(findText,QTextDocument::FindBackward)) { QMessageBox::warning(this,tr("查找"),tr("找不到 %1").arg(findText)); }}
其实还有一部分功能没实现,有兴趣的话可以关注我下一篇文章。

读书人网 >编程

热点推荐