QT txt读写—论坛体编辑器

论坛体生成和编辑

创建一个输入id和内容后能自动加上论坛体格式的软件
主要需求:创建txt,读取txt,显示内容,为内容添加特定格式并保存

界面编辑

创建按钮后右键添加槽

ui界面

txt创建

根据输入的标题创建txt文件,在未输入时弹出提示,并由用户自行选择创建路径。

void MainWindow::on_createButton_clicked()
{
    QString newName = ui->nameTextEdit->toPlainText();
    if(newName.isEmpty())
    {
        QMessageBox::about(NULL,"warning","请输入标题");
        return;
    }
    QString newfileName = newName.append(".txt");
    //读取用户输入的标题
    
    QDir tempDir;
    QString filePath = QFileDialog::getExistingDirectory(NULL,"caption",".");
    //用户选择路径
    QFile *tempFile = new QFile;
    tempDir.setCurrent(filePath);
    if(tempFile->exists(newfileName))
    {
        QMessageBox::about(NULL,"warning","文件存在");
        return ;
    }
    //检查filePath路径下是否存在文件fileName,如果停止操作。
    //此时,路径下没有fileName文件,使用下面代码在当前路径下创建文件
    tempFile->setFileName(newfileName);
    if(tempFile->open(QIODevice::ReadOnly|QIODevice::Text))
    {
        QMessageBox::about(NULL,"warning","创建成功");
    }
    fileName = tempFile->fileName(); //fileName为设置的全局变量
    tempFile->close();
}

txt读取

读取txt,并显示txt的名称和内容

void MainWindow::on_readButton_clicked()
{

    QString curPath = QDir::currentPath();
    QString dlgTitle = "Open the file";
    QString filter = "文本文件(*.txt)";
    QString aFileName = QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
    fileName = aFileName; //fileName为设置的全局变量
    if (aFileName.isEmpty())
        return;
    openTextByIODevice(aFileName);
}

bool MainWindow::openTextByIODevice(const QString &aFileName)
{//用IODevice方式打开文本文件
    QFile   aFile(aFileName);
    if (!aFile.exists()) //文件不存在
        return false;
    if (!aFile.open(QIODevice::ReadOnly | QIODevice::Text))
        return false;
    QTextCodec *codec = QTextCodec::codecForName("GBK");
    QString strAll=codec->toUnicode(aFile.readAll());
    //设置GBK,防止汉字显示为乱码
    ui->contentTextEdit->setPlainText(strAll);
    QString FileName = aFileName.mid(aFileName.lastIndexOf("/"));
    ui->nameTextEdit->setPlainText(FileName+1);
    //显示读取的文件的名称
    aFile.close();
    return  true;
}

内容添加

每一层的格式为

回复内容
№楼层数 ☆☆☆ ID 于 XXXX-XX-XX YY:YY:YY留言☆☆☆

读取面板中显示的内容并添加回复框中内容到文件中


void MainWindow::on_sendButton_clicked()
{
    if(fileName.isEmpty())
    {
        QMessageBox::about(NULL,"warning","请创建或读取文件");
        return;
    }
    //判断是否已经读取或创建文件
    QString id = ui->idTextEdit->toPlainText();
    QString reply = ui->replyTextEdit->toPlainText();
    QString article = ui ->contentTextEdit->toPlainText();
    QString fl = "0";
    if (article.contains("№"))
    {
        int sitNo = article.lastIndexOf("№");
        QString lastReply = article.mid(sitNo+1);
        int sitStar = lastReply.indexOf("☆");
        QString st = lastReply.left(sitStar-1);
        int stg = st.toInt()+1;
        fl = QString::number(stg);
    }else {
        fl = "0";
    }
    //计算楼层数:读取显示内容中最后一个“№”符号的位置,截取从№到☆之间的内容
    
    QString content = reply.append("\n№").append(fl).append(" ☆☆☆ ").append(id).append(" XXXX-XX-XX YY:YY:YY留言☆☆☆\n\n");
	
    QString newArticle = article.append(content);
    ui->contentTextEdit->setPlainText(newArticle);
	//添加回复内容
	
    QFile aFile(fileName);
    if (!aFile.open(QIODevice::WriteOnly | QIODevice::Text))
         return;
    QTextStream aStream(&aFile); //用文本流读取文件
    QString str=ui->contentTextEdit->toPlainText(); //转换为字符串
    aStream<<str; //写入文本流
    ui->replyTextEdit->setPlainText("");
    aFile.close();//关闭文件
}

保存文件

保存txt文件

void MainWindow::on_saveButton_clicked()
{
    if(fileName.isEmpty())
    {
        QMessageBox::about(NULL,"warning","请创建或读取文件");
        return;
    }
    QFile aFile(fileName);
    if (!aFile.open(QIODevice::WriteOnly | QIODevice::Text))
         return;
    QTextStream aStream(&aFile); //用文本流读取文件
    QString str=ui->contentTextEdit->toPlainText(); //转换为字符串
    qDebug()<<str<<endl;
//  aFile.write(strBytes,strBytes.length());
    aStream<<str; //写入文本流
    aFile.close();//关闭文件
    QMessageBox::about(NULL,"warning","保存成功");
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值