利用标准文件对话框QFileDialog打开一个已经存在的文件。用QtextEdit显示文件内容。
下面给出示例
file_widget.h
#ifndef FILEWIDGET_H
#define FILEWIDGET_H
#include <QFileDialog>
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QHBoxLayout>
#include <QFile>
#include <QIODevice>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QTextStream>
#include <QMessageBox>
class FileWidget : public QWidget
{
Q_OBJECT
public:
explicit FileWidget(QWidget *parent = 0);
public slots:
void slotOpenFileDialog();
private:
QPushButton *openBtn;
QLabel *tipsLabel;
QTextEdit *showText;
};
#endif //FILEWIDGET_H
file_widget.cpp
#include "file_widget.h"
FileWidget::FileWidget(QWidget *parent /*= 0*/) : QWidget(parent)
{
//---按钮与label
openBtn = new QPushButton("OPEN", this);
connect(openBtn, SIGNAL(clicked()), this, SLOT(slotOpenFileDialog()));
tipsLabel = new QLabel("open file...", this);
//----showText
showText = new QTextEdit();
//---按钮与label布局
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->addStretch();
vLayout->addWidget(tipsLabel);
vLayout->addWidget(openBtn);
vLayout->addStretch();
vLayout->setSpacing(10);
// hLayout->setContentsMargins(10, 2, 10, 2);
//---3个控件整体布局
QHBoxLayout *hLayout = new QHBoxLayout(this);
hLayout->addLayout(vLayout);
hLayout->addWidget(showText);
hLayout->setSpacing(10);
hLayout->setContentsMargins(10, 2, 10, 2);
//--显示布局
setLayout(hLayout);
//---窗口属性
resize(400, 300);
setWindowTitle("open file");
}
//------打开文件对话框
void FileWidget::slotOpenFileDialog()
{
/*
getOpenFileName函数说明
函数原形: QStringList QFileDialog::getOpenFileNames(
QWidget * parent = 0,
const QString & caption = QString(), // 打开文件对话框的标题
const QString & dir = QString(), // 查找目录
const QString & filter = QString(), // 设置需要过滤的文件格式
QString * selectedFilter = 0,
Options options = 0) [static]
*/
//---获取文件名
QString fileName = QFileDialog :: getOpenFileName(this, NULL, NULL, "*.h *.cpp *.txt");
//---打开文件并读取文件内容
QFile file(fileName);
//--打开文件成功
if (file.open(QIODevice ::ReadOnly | QIODevice ::Text))
{
QTextStream textStream(&file);
while (!textStream.atEnd())
{
//---QtextEdit按行显示文件内容
showText->append(textStream.readLine());
}
}
else //---打开文件失败
{
/*
information函数参数说明:
函数原型
QMessageBox::information(
QWidget * parent,
const QString & title, //--- 标题
const QString & text, //---显示内容
StandardButtons buttons = Ok, //---OK按钮
StandardButton defaultButton = NoButton)
[static]
*/
QMessageBox ::information(NULL, NULL, "open file error");
}
}
main.cpp
#include <QtWidgets/QApplication>
#include "file_widget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
FileWidget win;
win.show();
return a.exec();
}
运行效果如下: