利用标准文件对话框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_Hfile_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(); }运行效果如下: