qt文本编辑器
示例代码:
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
isSaved =false;
curFile = tr("未命名.txt");
setWindowTitle(curFile);
init_statusBar();
} MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::do_file_New()
{
do_file_SaveOrNot();
isSaved = false;
curFile = tr("未命名.txt");
setWindowTitle(curFile);
ui->textEdit->clear();//清空文本编辑器
ui->textEdit->setVisible(true);//文本编辑器可见
} void MainWindow::do_file_SaveOrNot()
{
if(ui->textEdit->document()->isModified()) //如果文件被更改过,弹出保存对话框
{
QMessageBox box;
box.setWindowTitle(tr("警告"));
box.setIcon(QMessageBox::Warning);
box.setText(curFile+tr("尚未保存,是否保存?"));
box.setStandardButtons(QMessageBox::Yes|QMessageBox::No);
if(box.exec() == QMessageBox::Yes)
do_file_Save();
}
} void MainWindow::do_file_Save()
{
if(isSaved)
{
saveFile(curFile);
}
else
{
do_file_SaveAs();
}
} void MainWindow::do_file_SaveAs()
{
// QString fileName = QFileDialog::getSaveFileName(this,tr("另存为"),curFile);
QString fileName = QFileDialog::getSaveFileName(this,tr("另存为"),curFile); if(!fileName.isEmpty())
{
saveFile(fileName);
} } bool MainWindow::saveFile(const QString &fileName)
{
QFile file(fileName);
if(!file.open(QFile::WriteOnly|QFile::Text))
{
QMessageBox::warning(this,tr("保存文件"),
tr("无法保存文件 %1:\n %2").arg(fileName)
.arg(file.errorString())); return false;
} QTextStream out(&file);
out<<ui->textEdit->toPlainText();
isSaved = true;
curFile = QFileInfo(fileName).canonicalFilePath();
setWindowTitle(curFile);
return true;
} void MainWindow::do_file_Open()
{
do_file_SaveOrNot();
QString fileName = QFileDialog::getOpenFileName(this);
if(!fileName.isEmpty())
{
do_file_Load(fileName);
} 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());
curFile = QFileInfo(fileName).canonicalFilePath();
setWindowTitle(curFile);
return true; } void MainWindow::on_action_N_triggered()
{
do_file_New();
} void MainWindow::on_action_S_triggered()
{
do_file_Save();
} void MainWindow::on_action_2_triggered()
{
do_file_SaveAs();
} void MainWindow::on_action_O_triggered()
{
do_file_Open();
} void MainWindow::on_action_C_triggered()
{
do_file_SaveOrNot();
ui->textEdit->setVisible(false);
} void MainWindow::on_action_X_triggered()
{
on_action_C_triggered();
qApp->quit();
} void MainWindow::on_action_Z_triggered()
{
ui->textEdit->undo();
} void MainWindow::on_action_X_2_triggered()
{
ui->textEdit->cut();
} void MainWindow::on_action_C_2_triggered()
{
ui->textEdit->copy();
} void MainWindow::on_action_V_triggered()
{
ui->textEdit->paste();
} void MainWindow::on_action_F_triggered()
{
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())); } void MainWindow::show_findText()
{
QString findText = find_textLineEdit->text();
ui->textEdit->find(findText,QTextDocument::FindBackward);
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(,);
first_statusLabel -> setFrameShape(QFrame::WinPanel);
first_statusLabel -> setFrameShadow(QFrame::Sunken);
second_statusLabel = new QLabel;
second_statusLabel->setMinimumSize(,);
second_statusLabel ->setFrameShape(QFrame::WinPanel); second_statusLabel->setFrameShadow(QFrame::Sunken);
bar ->addWidget(first_statusLabel);
bar->addWidget(second_statusLabel);
first_statusLabel->setText(tr("欢迎使用文本编辑器"));
second_statusLabel->setText("yafeilinux 制作!"); }
qt文本编辑器的更多相关文章
- C++ GUI Qt4编写的文本编辑器
mainwindow.h: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMenu> #include <QAction& ...
- Qt富文本编辑器QTextDocument
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt富文本编辑器QTextDocument 本文地址:https://www.tech ...
- PyQt(Python+Qt)学习随笔:纯文本编辑器QPlainTextEdit功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QPlainTextEdit是用于纯文本的一个高级文档编辑器 ...
- PyQt(Python+Qt)学习随笔:富文本编辑器QTextEdit功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QTextEdit是一个高级的所见即所得的文档查看器和编辑器 ...
- C++ Qt 项目实战(一)之文本编辑器
文本编辑器例图 项目开发环境 系统版本:windows10 QT 版本: 5.9.9 开发语言:C++ 已实现功能 文件操作:新建,打开,保存,另存为,打印,退出 编辑操作:复制,粘贴,剪切,查找,替 ...
- 基于trie树的具有联想功能的文本编辑器
之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...
- qt_文本编辑器实现_附带详细注释和源码下载
源码下载: 链接: http://pan.baidu.com/s/1c21EVRy 密码: qub8 实现主要的功能有:新建,打开,保存,另存为,查找(查找的时候需要先将光标放到最下面位置才能查全,不 ...
- 在线富文本编辑器FckEditor配置(.Net Framework 3.5)
进入FCKeditor文件夹,编辑 fckconfig.js 文件.1.上传设置 . var _FileBrowserLanguage = 'php' ; // a ...
- python实现的文本编辑器 - Skycrab - 博客频道 - CSDN.NET
Download Qt, the cross-platform application framework | Qt Project Qt 5.2.1 for Windows 64-bit (VS 2 ...
随机推荐
- HTML5入门九---Canvas画布
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- python自省指南
深入python中对自省的定义: python的众多强大功能之一,自省,正如你所知道的,python中万物皆对象,自省是指代码可以查看内存中以对象形式存在的其他模块和函数,获取它们的信息,并对它们进行 ...
- HTML5+开发移动app教程3-mui开发示例
下面就开始一个简答的例子,以及mui相关内容 mui 官网:http://dcloudio.github.io/mui/ 说明:http://dev.dcloud.net.cn/mui/ui/inde ...
- PCB板的价格是怎么算出来的?
Part 1 :影响一块PCB板价格的各种因素 PCB的价格是很多采购者一直很困惑的事情,很多人在线下单时也会疑问这些价格是怎么算出来的,下面我们就一起谈论一下PCB价格的组成因素. 1.PCB所用材 ...
- python3.4安装suds
使用suds访问webservice十分方便 python3.x安装suds会报错“No module named client” 在stackoverflow上找到了替代方法,安装suds-jurk ...
- Android Dialogs(6)Dialog类使用示例:用系统theme和用自定义的theme
使用dialog时有很多 方法,其中一个就是直接 使用基类Dialog,可用来作一个没有按钮的非模态提示框,它可以直接从系统的主题构造也可从自定义的主题构造. 基本步骤: a,构造 b,调用dialo ...
- Android 面试题(经典)
1.Actvity的生命周期,生命周期中的onCreate与onResume有什么区别 Activity的生命周期有:onCreate,onStart,onRestart,onResume,onPau ...
- C++ STL之set的基本操作
set是集合,虽然也存在键值和实值,不过两者根本就是同一个值,键值的设置完全就是为了满足红黑树的底层结构,set操作与map很像不过也有些不同. 1. set迭代器与map的不同: (1)set使用接 ...
- 学军NOI训练13 T3 白黑树
唉,大学军有自己的OJ就是好,无限orz 只有周六的比赛是开放的囧,这场比赛最后因为虚拟机卡住没有及时提交…… 否则就能让大家看到我有多弱了…… 前两题题解写的很详细,可以自己去看,我来随便扯扯T3好 ...
- bzoj2351 2462
我没写hash,写了一些奇怪的做法,好像被hash随便操了…… 如果没有多测,那么这道题是白书上的例题 把询问矩阵当作a个模板串,建成一个ac自动机 把一开始的矩阵当作n个串放到自动机上匹配,找到a个 ...