论坛体生成和编辑
创建一个输入id和内容后能自动加上论坛体格式的软件
主要需求:创建txt,读取txt,显示内容,为内容添加特定格式并保存
界面编辑
创建按钮后右键添加槽
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","保存成功");
}