编程练习:记事本
2014-07-03 21:23
260 查看
核心逻辑:采用C++,界面库:用的QT,如下
文件目录:
执行程序:
核心代码:
文件目录:
执行程序:
核心代码:
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QtGui> #include <windows.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //初始化 isAutoChangeLine=false; //初始不自动换行 ui->action_ChangeLine->setChecked(isAutoChangeLine); isSaved=false; //初始文件为未保存状态 curFileName=tr("未命名.txt"); setWindowTitle(curFileName); //初始化主窗口的标题 setWindowIcon(QIcon(":/icoFile/images/formico.png")); ui->textEdit->setFontFamily("Arial");//默认字体 ui->textEdit->setTextColor("Black");//默认颜色 init_statusBar();//状态栏 connect(ui->textEdit,SIGNAL(cursorPositionChanged()),this,SLOT(do_cursorChanged())); } MainWindow::~MainWindow() { delete ui; } //新建 void MainWindow::do_file_New() { do_file_SaveOrNot(); //新建前,修改的文件是否保存 isSaved=false; curFileName=tr("未命名.txt"); setWindowTitle(curFileName); ui->textEdit->clear(); ui->textEdit->setVisible(true); //文本编辑器可见 ui->textEdit->setFontFamily("Arial");//默认字体 ui->textEdit->setTextColor("Black");//默认颜色 } //新建前,修改的文件是否保存 void MainWindow::do_file_SaveOrNot() { //如果被修改过,弹出保存对话框 if(ui->textEdit->document()->isModified()) { QMessageBox msgBox; msgBox.setWindowTitle(tr("警告")); msgBox.setIcon(QMessageBox::Warning); msgBox.setText(curFileName+tr("尚未保存,是否保存?")); msgBox.setStandardButtons(QMessageBox::Yes|QMessageBox::No); //如果选择保存,则执行保存动作 if(msgBox.exec()==QMessageBox::Yes) { do_file_Save(); } } } //保存 void MainWindow::do_file_Save() { //如果已经被保存过,直接保存 if(isSaved) { saveFile(curFileName); } //否则,调用另存为 else { do_file_SaveAs(); } } //另存为 void MainWindow::do_file_SaveAs() { QString fileName=QFileDialog::getSaveFileName(this,tr("另存为"),curFileName,tr("文本文件 (*.txt);;All files(*.*)")); //如果文件名非空,则保存 if(!fileName.isEmpty()) { saveFile(fileName); } } //保存操作 bool MainWindow::saveFile(const QString &fileName) { //定义1个QFile对象file QFile file(fileName); //以只写方式打开文件,如果打开失败弹出提示,提前返回 if(!file.open(QFile::WriteOnly|QFile::Text)) { QMessageBox::warning(this, tr("保存文件"), tr("无法保存文件%1:\n%2").arg(fileName).arg(file.errorString()) ); //%1,%2表示后面两个参数 return false; } //正常,新建流对象,指向选定文件 QTextStream out(&file); //将文本编辑器中的内容以纯文本的形式输出到流对象中 out<<ui->textEdit->toPlainText(); isSaved=true; //文本编辑器变化状态重置 ui->textEdit->document()->setModified(false); //获取文件的标准路径 curFileName=QFileInfo(fileName).canonicalFilePath(); //获取文件名,包括后缀 curFileNameWithOutPath=QFileInfo(fileName).fileName(); //主窗口名称改为现在的路径 setWindowTitle(curFileNameWithOutPath); second_statusLabel->setText(tr("保存文件成功")); return true; } //打开文件 void MainWindow::do_file_Open() { do_file_SaveOrNot(); QString fileName=QFileDialog::getOpenFileName(this,tr("打开文件"),QDir::currentPath(),tr("文本文件 (*.txt);;All files(*.*)"));//getOpenFileName(this) //如果文件名不为空 if(!fileName.isEmpty()) { do_file_Load(fileName); curFileName=QFileInfo(fileName).canonicalFilePath(); //获取文件名,包括后缀 curFileNameWithOutPath=QFileInfo(fileName).fileName(); //主窗口名称改为现在的路径 setWindowTitle(curFileNameWithOutPath); second_statusLabel->setText(tr("打开文件成功")); //被保存过 isSaved=true; //文本编辑器可见 ui->textEdit->setVisible(true); } } //读取文件 bool MainWindow::do_file_Load(const QString &fileName) { QFile file(fileName); if(!file.open(QFile::ReadOnly|QFile::Text)) { QMessageBox::warning(this, tr("读取文件"), tr("无法读取文件%1:\n%2").arg(fileName).arg(file.errorString()) ); return false; } QTextStream in(&file); ui->textEdit->setText(in.readAll()); curFileName=QFileInfo(fileName).fileName(); setWindowTitle(curFileName); second_statusLabel->setText(tr("打开文件成功!")); return true; } ////槽函数 //新建 void MainWindow::on_action_New_triggered() { do_file_New(); } //保存 void MainWindow::on_action_Save_triggered() { do_file_Save(); } //另存为 void MainWindow::on_action_SaveAs_triggered() { do_file_SaveAs(); } //打开 void MainWindow::on_action_Open_triggered() { do_file_Open(); } //关闭 void MainWindow::on_action_Close_triggered() { do_file_SaveOrNot(); curFileName=""; curFileNameWithOutPath=""; //文本编辑器变化状态重置 ui->textEdit->document()->setModified(false); ui->textEdit->setVisible(false); first_statusLabel->setText(tr("文本编辑器已经关闭")); second_statusLabel->setText(tr("KAKASI制作!")); } //退出 void MainWindow::on_action_Quit_triggered() { //先执行关闭动作 on_action_Close_triggered(); //再退出系统,qApp是指向应用程序的全局指针 qApp->quit(); } //撤销 void MainWindow::on_action_Undo_triggered() { ui->textEdit->undo(); } //剪贴 void MainWindow::on_action_Cut_triggered() { ui->textEdit->cut(); } //复制 void MainWindow::on_action_Copy_triggered() { ui->textEdit->setFontFamily("Arial");//默认字体 ui->textEdit->setTextColor("Black");//默认颜色 ui->textEdit->copy(); } //粘贴 void MainWindow::on_action_Paste_triggered() { ui->textEdit->paste(); } //查找 void MainWindow::on_action_Find_triggered() { //新建1个对话框,用于查找操作,this表明父窗口为MainWindow QDialog *findDlg=new QDialog(this); findDlg->setWindowTitle(tr("查找")); find_textLineEdit=new QLineEdit(findDlg); QPushButton *find_Btn=new QPushButton(tr("查找下一个"),findDlg); QVBoxLayout *layout=new QVBoxLayout(findDlg); layout->addWidget(find_textLineEdit); layout->addWidget(find_Btn); findDlg->show(); connect(find_Btn,SIGNAL(clicked()),this,SLOT(show_findText())); second_statusLabel->setText(tr("正在进行查找")); } //查找 void MainWindow::show_findText() { QString findText=find_textLineEdit->text(); if(!ui->textEdit->find(findText,QTextDocument::FindBackward)) { QMessageBox::warning(this,tr("查找"),tr("找不到%1").arg(findText)); } } // void MainWindow::init_statusBar() { QStatusBar *bar=ui->statusBar; first_statusLabel=new QLabel; first_statusLabel->setMinimumSize(150,20);//最小尺寸 first_statusLabel->setFrameShape(QFrame::NoFrame);//形状WinPanel// first_statusLabel->setFrameShadow(QFrame::Plain);//阴影//Sunken second_statusLabel=new QLabel; second_statusLabel->setMinimumSize(150,20);//最小尺寸 second_statusLabel->setFrameShape(QFrame::NoFrame);//形状 second_statusLabel->setFrameShadow(QFrame::Plain);//阴影 bar->addWidget(first_statusLabel); bar->addWidget(second_statusLabel); first_statusLabel->setText(tr("欢迎使用文本编辑器")); second_statusLabel->setText(tr("KAKASI制作!")); } // void MainWindow::do_cursorChanged() { //行号 int rowNum=ui->textEdit->document()->blockCount(); const QTextCursor cursor=ui->textEdit->textCursor(); //列号 int colNum=cursor.columnNumber(); first_statusLabel->setText(tr("%1行 %2列").arg(rowNum).arg(colNum)); } //记事本 void MainWindow::on_action_Windows_NotePad_triggered() { UINT s=WinExec("notepad.exe", SW_SHOW); s=0; //UINT to QString //QString b; //b=QString::number(s); //QString to char //char *ch; //ch =b.toLatin1().data(); ////if(s<=31)QMessageBox::warning(this,tr("提示"),tr("执行状态:%1").arg(s)); } //自动换行 void MainWindow::on_action_ChangeLine_triggered() { if(!isAutoChangeLine)//如果没自动换行,则自动换行 { ui->textEdit->setLineWrapMode(QTextEdit::WidgetWidth);; } else { ui->textEdit->setLineWrapMode(QTextEdit::NoWrap);; } //状态切换 isAutoChangeLine=!isAutoChangeLine; ui->action_ChangeLine->setChecked(isAutoChangeLine); } //About void MainWindow::on_action_Version_triggered() { QMessageBox::information(this,tr("版本"),"卡卡西V1.0",QMessageBox::Ok); }
相关文章推荐
- java界面编程 练习 : 记事本
- C primer plus(编程练习)file-3.11-6
- 斯坦福大学开放课程:编程方法.03/第三课练习:karel 算数(将未知数量beeper变为X倍)
- C与指针课后答案与编程练习(第一章)
- java例程练习(网络编程[简单网络连接试验])
- C.Primer.Plus(第六版)第13章 编程练习
- GUI练习——记事本
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第5章编程练习1
- C primer plus(第五版)编程练习第八章
- <<C和指针>>第1章之编程练习心得20140702
- c++ primer plus(第6版)中文版 第六章编程练习答案
- 编程练习(2)——双向链表反转
- 基础练习 特殊的数字_java 编程
- Lesson_for_java_day23--java的网络编程练习(登入界面、上传文档、上传图片、通过网络文本转换)
- C primer plus(编程练习)file-4.8-1
- 无聊的练习编程
- 【编程练习】二叉查找树原理及基本操作编程(GNU C实现)
- C Primer Plus (第五版) 第二章 编程练习
- 【C编程练习】2013华为校园招聘机试题9月10日题1:把整数转换成字符串 void ConvertIntToStr(int nVal, char* pStr);
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习3