文章目录
Qt打开单个文件
#include <QDir>
#include <QFileDialog>
QString curPath=QDir::currentPath(); //初始化目录
QString dlgTitle = "选择一个文件"; //对话框标题
QString filter = "文本文件(*.txt);;图片文件(*.jpg *.gif);;所有文件(*.*)"; //文件过滤器
QString aFileName = QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter); //getOpenFileName返回选择文件的带路径的完整文件名
if(!aFileName.isEmpty()) //添加文件名称到文本框
ui->listWidget->addItem(aFileName);
Qt使用QFile对文件进行读写和保存
读写
#include <QDir>
#include <QFileDialog>
void MainWindow::on_actOpen_IODevice_triggered()
{
QString curPath = QDir::currentPath();
QString dlgTitle = "打开一个文件";
QString filter = "程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)";
QString aFileName = QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
if(aFileName.isEmpty())
return;
openTextByIODevice(aFileName);
}
bool MainWindow::openTextByIODevice(const QString &aFileName)
{
QFile aFile(aFileName);
if(!aFile.exists()) //文件不存在
return false;
if(!aFile.open(QIODevice::ReadOnly|QIODevice::Text))
return false;
ui->textEditDevice->setPlainText(aFile.readAll()); //plain text editor
aFile.close();
ui->tabWidget->setCurrentIndex(0); //设置选中tabWidget
return true;
}
保存
注意:这里的保存代码和读写在一起。将读写的文件保存起来。
#include <QDir>
#include <QFileDialog>
void MainWindow::on_actSave_IODevice_triggered()
{
QString curPath = QDir::currentPath();
QString dlgTitle = "另存为一个文件";
QString filter = "程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)";
QString aFileName = QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
if(aFileName.isEmpty())
return;
saveTextByIODevice(aFileName);
}
bool MainWindow::saveTextByIODevice(const QString &aFileName)
{
QFile aFile(aFileName);
if(!aFile.open(QIODevice::WriteOnly|QIODevice::Text))
return false;
QString str=ui->textEditDevice->toPlainText(); //整个内容作为字符串
QByteArray strBytes = str.toUtf8(); //转换为字符数组
aFile.write(strBytes,strBytes.length());
aFile.close();
ui->tabWidget->setCurrentIndex(0);
return true;
}
Qt使用QStream对文件进行读写和保存
读写
#include <QDir>
#include <QFileDialog>
#include <QTextStream>
void MainWindow::on_actionQTextStream_triggered()
{
QString curPath = QDir::currentPath();
QString dlgTitle = "打开一个文件";
QString filter = "程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)";
QString aFileName = QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
if(aFileName.isEmpty())
return;
openTextByStream(aFileName);
}
//读写全部
bool MainWindow::openTextByStream(const QString &aFileName)
{
QFile aFile(aFileName);
if(!aFile.exists()) //文件不存在
return false;
if(!aFile.open(QIODevice::ReadOnly|QIODevice::Text))
return false;
QTextStream aStream(&aFile);
aStream.setAutoDetectUnicode(true); //自动检测Unicode,才能显示汉字;
ui->textEditStream->setPlainText(aStream.readAll());
aFile.close();//关闭文件
ui->tabWidget->setCurrentIndex(1);
return true;
}
//按行读写
bool MainWindow::openTextByStream(const QString &aFileName)
{
QFile aFile(aFileName);
if(!aFile.exists()) //文件不存在
return false;
if(!aFile.open(QIODevice::ReadOnly|QIODevice::Text))
return false;
QTextStream aStream(&aFile);
aStream.setAutoDetectUnicode(true); //自动检测Unicode,才能显示汉字;
while(!aStream.atEnd())
{
QString str = aStream.readLine();//读取文件的一行文本
ui->textEditStream->appendPlainText(str);
}
aFile.close();//关闭文件
ui->tabWidget->setCurrentIndex(1);
return true;
}
#include <QDir>
#include <QFileDialog>
#include <QTextStream>
保存
void MainWindow::on_actionQTextStream_2_triggered()
{
QString curPath = QDir::currentPath();
QString dlgTitle = "另存为一个文件";
QString filter = "程序文件(*.h *.cpp);;文本文件(*.txt);;所有文件(*.*)";
QString aFileName = QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
if(aFileName.isEmpty())
return;
saveTaextByStream(aFileName);
}
bool MainWindow::saveTaextByStream(const QString &aFileName)
{
QFile aFile(aFileName);
if(!aFile.open(QIODevice::WriteOnly|QIODevice::Text))
return false;
QTextStream aStream(&aFile); //用文本流读取文件
aStream.setAutoDetectUnicode(true);
QString str=ui->textEditStream->toPlainText();
aStream<<str; //写入文本流;
aFile.close(); //关闭文件
return true;
}
解决中文读取乱码问题
main()函数设置
#include "mainwindow.h"
#include <QApplication>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QTextCodec *codec=QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Qt打开多个文件
#include <QDir>
#include <QFileDialog>
QString curPath=QDir::currentPath(); //初始化目录
QString dlgTitle="选择多个文件"; //对话框标题
QString filter = "文本文件(*.txt);;图片文件(*.jpg *.gif);;所有文件(*.*)"; //文件过滤器
QStringList fileList = QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter); //getOpenFileNames返回选择文件的带路径的完整文件名
for(int i=0;i<fileList.count();i++) //添加文件名到文本框
ui->listWidget->addItem(fileList.at(i));
Qt打开已有目录
#include <QDir>
#include <QFileDialog>
QString curPath = QCoreApplication::applicationDirPath();
QString dlgTitle="选择一个目录";
QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly);
if(!selectedDir.isEmpty())
ui->listWidget->addItem(selectedDir);
Qt选择保存文件名
#include <QDir>
#include <QFileDialog>
QString curPath = QCoreApplication::applicationDirPath();
QString dlgTitle = "保存文件";
QString filter = "文本文件(*.txt);;图片文件(*.jpg *.gif);;所有文件(*.*)"; //文件过滤器
QString aFileName = QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
if(!aFileName.isEmpty())
ui->listWidget->addItem(aFileName);
Qt打开颜色框并为文本框设置颜色
#include <QColorDialog>
QPalette pal = ui->listWidget->palette(); //获取现有palette
qDebug()<<pal;
QColor iniColor = pal.color(QPalette::Text); //现有的文字颜色
QColor color = QColorDialog::getColor(iniColor,this,"选择颜色");
if(color.isValid())
{
pal.setColor(QPalette::Text,color);
ui->listWidget->setPalette(pal);
ui->listWidget->addItem("设置颜色成功");
}
Qt实现字符串对话框
#include <QLineEdit>
#include <QInputDialog>
QString dlgTitle = "输入文字对话框";
QString txtLabel = "请输入文件名";
QString defaultInput="新建文件.txt";
QLineEdit::EchoMode echoMode = QLineEdit::Normal;//QLineEdit::EchoMode echoMode = QLineEdit::Password密码模式;
bool ok = false;
QString text = QInputDialog::getText(this,dlgTitle,txtLabel,echoMode,defaultInput,&ok);
if(ok&&!text.isEmpty())
ui->listWidget->addItem(text);
实现效果
Qt实现整数对话框
#include <QInputDialog>
QString dlgTitle = "输入整数对话框";
QString txtLabel="设置字体大小";
int defaultValue = ui->listWidget->font().pointSize();
int minValue = 6,maxValue=50,setpValue=1;
bool ok = false;
int inputValue = QInputDialog::getInt(this,dlgTitle,txtLabel,defaultValue,minValue,maxValue,setpValue,&ok);
if(ok)
{
QFont font =ui->listWidget->font();
font.setPointSize(inputValue);
ui->listWidget->setFont(font);
}
实现效果
Qt实现浮点数对话框
#include <QInputDialog>
QString dlgTitle = "输入浮点数对话框";
QString txtLabel = "输入一个浮点数";
float defaultValue = 3.13;
float minValue = 0,maxValue = 10000;
int decimals=2;
bool ok =false;
float inputValue = QInputDialog::getDouble(this,dlgTitle,txtLabel,defaultValue,minValue,maxValue,decimals,&ok);
if(ok)
{
QString str = QString::asprintf("输入了一个浮点数:%.2f",inputValue);
ui->listWidget->addItem(str);
}
实现效果
Qt实现下拉列表选择输入
#include <QInputDialog>
QStringList items;
items <<"优秀"<<"良好"<<"合格"<<"不合格";
QString dlgTitle ="条目选择对话框";
QString txtLabel = "请选择级别";
int curIndex= 0;
bool editable = true; //ComboBox是否可编辑;
bool ok =false;
QString text = QInputDialog::getItem(this,dlgTitle,txtLabel,items,curIndex,editable,&ok);
if(ok && !text.isEmpty()){
ui->listWidget->addItem(text);
}
实现效果
Qt实现消息对话框
#include <QMessageBox>
QString dlgTitle = "information消息框";
QString strInfo = "文件已经打开,字体大小已经设置";
QMessageBox::information(this,dlgTitle,strInfo,QMessageBox::Ok,QMessageBox::NoButton);
Qt实现消息警示框
#include <QMessageBox>
QString dlgTitle = "warning消息框";
QString strInfo = "文件内容已经被修改";
QMessageBox::warning(this,dlgTitle,strInfo);
Qt实现about关于框
#include <QMessageBox>
QString dlgTitle = "about消息框";
QString strInfo = "开发数据查看软件V1.0";
QMessageBox::about(this,dlgTitle,strInfo);
}
Qt实现Question选择框
#include <QMessageBox>
QString dlgTitle = "Question消息框";
QString strInfo = "文件已经被修改,是否修改保存";
QMessageBox::StandardButton defaultBtn = QMessageBox::NoButton;
QMessageBox::StandardButton result;
result = QMessageBox::question(this,dlgTitle,strInfo,QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,defaultBtn);
if(result==QMessageBox::Yes)
ui->listWidget->addItem("Question消息框:Yes被选择");
else if(result==QMessageBox::No)
ui->listWidget->addItem("Question消息框:NO被选择");
else if(result ==QMessageBox::Cancel)
ui->listWidget->addItem("Question消息框:Cancel被选择");
else
ui->listWidget->addItem("Question消息框:无选择");