Qt

Qt 记事本程序

2

目的:这个例子,仿照windows记事本写一个小程序。

Ui如下:

notepad

  • 设计打开文档功能:

 

void MainWindow::openFileSlot()
{
    QString fileName = QFileDialog::getOpenFileName(this,"打开文件",QDir::currentPath());
    //利用QFileDialog的静态函数,打开一个对话框,并获取到文件名
    if(fileName.isEmpty())//如果getOpenFileName返回null
    {
        QMessageBox::warning(this,"提示","您并没有打开任何文档");
        return;
    }

    QFile *file = new QFile;
    file->setFileName(fileName);//设置文件名称

    bool ok = file->open(QIODevice::ReadOnly);//用只读方式打开文件,也可以用下面这样的写法
    /*
    if(!file->open(QIODevice::ReadOnly))
    {
	QMessageBox::information(this,"提示","您打开的文件不存在");
	return;
    }
	*/
    if(ok)
    {
        //文件与文本流相关联
        QTextStream in(file);
        //in.readAll();//将所有的字符串读取出来
        ui->textEdit->setText(in.readAll());
    }
    else
    {
        QMessageBox::warning(this,"提示","没有打开的权限"+file->errorString());
		//提示出错信息
        return;
    }
    file->close();
    delete file;
}

注意:这里必须关闭文档,并且删除指针。不然会出现野指针的情况。

  • 设计另存为文档功能

 

void MainWindow::saveAsFileSlot()
{
    QString saveFileName = QFileDialog::getSaveFileName(this,"保存文件",QDir::currentPath());
	//获取当前路径的文档窗口,并获取输入要保存文件的名字
    if(saveFileName.isEmpty())
    {
        QMessageBox::warning(this,"提示","您没有输入文件名称");
        return;
    }
    QFile *file = new QFile;
    file->setFileName(saveFileName);
    bool ok = file->open(QIODevice::WriteOnly);

    if(ok)
    {
        QTextStream out(file);
        out<<ui->textEdit->toPlainText();//提取textEdit中的纯文本,写入文件
    }
    else
    {
        QMessageBox::warning(this,"提示","打开文件错误");
    }
    file->close();
    delete file;
}

这里用到了textEdit的toPlainText()方法,在Qt帮助文档中的解释如下:

This property gets and sets the text editor’s contents as plain text. 

翻译为:这个属性获取和设置编辑器的内容为纯文本。

同时这里用到了QTextStream类,可以参考:Qt QDataStream类

如果需要实现在打开文档的时候,就有一个默认的保存文件名的话,可以通过以为实现方法:

saveFileName = QFileDialog::getSaveFileName(this,"保存文件","./未命名.txt",tr("Text (*.txt)"));
  • 设计保存文档功能

 

void MainWindow::saveFileSlot()
{
    if(saveFileName.isEmpty())//如果这个文档没有被保存过
    {
        this->saveAsFileSlot();
    }
    else
    {
        QFile *file = new QFile;
        file->setFileName(saveFileName);
        bool ok = file->open(QIODevice::WriteOnly);

        if(ok)
        {
            QTextStream out(file);
            out<<ui->textEdit->toPlainText();
            return;
        }
        file->close();
        this->setWindowTitle(saveFileName);//设置这个程序的标题
        delete file;
    }
}

在这个程序中saveFileName是全局变量。

  • 设计新建文档操作

 

void MainWindow::newFileSlot()
{
    if(ui->textEdit->document()->isModified())
    {
        QMessageBox::information(this,"提示","文档已经被修改");
		this->saveFileSlot();
        //如果当前的文档已经被修改了,就实现保存文档操作。
    }
    else
    {
        ui->textEdit->clear();
        this->setWindowTitle("新建文件.txt");
    }
}

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部