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(150,20); first_statusLabel -> setFrameShape(QFrame::WinPanel); first_statusLabel -> setFrameShadow(QFrame::Sunken); second_statusLabel = new QLabel; second_statusLabel->setMinimumSize(150,20); 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 制作!"); }