Подсказки на компьютерную тематику

Можно подсмотреть, если забыли…

Как в программе на Qt выбрать и открыть файл

Выбор и открытие файла в программе на C++ в Qt

Иногда в приложениях бывает необходимо выбрать какой либо файл на компьютере и получить данные из него для дальнейшей работы. Для этого можно использовать класс QFileDialog из системы Qt.

Пример работающего кода для выбора и подключения к файлу базы данных

  • Создается проект, например openfileandclasses

  • В верхней части файла openfileandclasses.pro следует добавить код QT += sql для работы с SQL

  • В файле mainwindow.h в разделе class MainWindow : public QMainWindow прописать функцию для выбора и открытия содержимого файла
  • private slots:
    void openfile();// это созданный нами слот для выбора и открытия файла

  • Файл main.cpp трогать не надо

  • В дизайнере программы mainwindow.ui создать виджеты, используемые в коде программы:
  • widget class=”QTableView” name=”tableView
  • widget class=”QPushButton” name=”pushButton” с надписью Выбрать файл и подключиться

  • В mainwindow.cpp надо:
  • Добавить классы:
  • #include "QtGui"
    #include "QFileDialog"//для диалоговых окон
    #include "QSqlQuery"//для работы с SQL запросами
    #include "QTableView"//для работы с графическим выводом информации в виде таблиц
    #include "QSqlTableModel" //класс для работы с редактируемой одиночной таблицей из БД
    #include "QSqlRelationalTableModel" //класс для работы с редактируемой таблицей из БД с поддержкой внешних ключей
    #include "QSqlQueryModel" //класс для работы с таблицей только для чтения из БД для вывода SQL запросов
  • Привязать эту функцию к созданной кнопке pushButton_2:
  • connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(openfile())); //для выбора файла на компьютере
  • И в конце прописать программный код с использованием класса QFileDialog, которая открывает стандартное окно ОС Ubuntu для выбора файла:
  • void MainWindow::openfile(){

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// db - это внешняя глобальная переменная, которую можно использовать тво всех файлах программы
    QSqlTableModel *model = new QSqlTableModel; //создается глобальный объект модели таблицы с редактируемыми ячейками

    //в переменную file после выбора файла автоматически поместится его адрес
    QString file = QFileDialog::getOpenFileName(
    this,
    "Select one or more files to open",//заголовок открывающегося стандартного окна
    "/home");
    //каталог, который открывается при запуске

    //если прописать QDir :: currentPath (); то откроется каталог созданного приложения Qt с исполняемыми файлами программы

    //подключить БД по ее адресу на компьютере
    db.setDatabaseName(file);
    //открывает базу данных по адресу file
    db.open();
    model->setTable("basetable");//выбирается существующая табл БД
    //Возможны значения для редактирования записей:
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);//настраивается редактирование таблицы
    //model->setEditStrategy(QSqlTableModel::OnFieldChange);//данные сохранятся в БД сразу при переходе на другую ячейку
    //model->setEditStrategy(QSqlTableModel::OnRowChange);//данные сохранятся в БД сразу при переходе на другую строку
    model->select();//заполняет модель данными из таблицы, без этого кода выйдет пустая таблица
    ui->tableView->setModel(model);//выводит в виде таблицы все элементы в окне приложения
    }

Как в программе на Qt выбрать и открыть файл

Выбор и открытие файла в программе на C++ в Qt

Иногда в приложениях бывает необходимо выбрать какой либо файл на компьютере и получить данные из него для дальнейшей работы. Для этого можно использовать класс QFileDialog из системы Qt.

Пример работающего кода для выбора и подключения к файлу базы данных

  • Создается проект, например openfileandclasses

  • В верхней части файла openfileandclasses.pro следует добавить код QT += sql для работы с SQL

  • В файле mainwindow.h в разделе class MainWindow : public QMainWindow прописать функцию для выбора и открытия содержимого файла
  • private slots:
    void openfile();// это созданный нами слот для выбора и открытия файла

  • Файл main.cpp трогать не надо

  • В дизайнере программы mainwindow.ui создать виджеты, используемые в коде программы:
  • widget class=”QTableView” name=”tableView
  • widget class=”QPushButton” name=”pushButton” с надписью Выбрать файл и подключиться

  • В mainwindow.cpp надо:
  • Добавить классы:
  • #include "QtGui"
    #include "QFileDialog"//для диалоговых окон
    #include "QSqlQuery"//для работы с SQL запросами
    #include "QTableView"//для работы с графическим выводом информации в виде таблиц
    #include "QSqlTableModel" //класс для работы с редактируемой одиночной таблицей из БД
    #include "QSqlRelationalTableModel" //класс для работы с редактируемой таблицей из БД с поддержкой внешних ключей
    #include "QSqlQueryModel" //класс для работы с таблицей только для чтения из БД для вывода SQL запросов
  • Привязать эту функцию к созданной кнопке pushButton_2:
  • connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(openfile())); //для выбора файла на компьютере
  • И в конце прописать программный код с использованием класса QFileDialog, которая открывает стандартное окно ОС Ubuntu для выбора файла:
  • void MainWindow::openfile(){

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// db - это внешняя глобальная переменная, которую можно использовать тво всех файлах программы
    QSqlTableModel *model = new QSqlTableModel; //создается глобальный объект модели таблицы с редактируемыми ячейками

    //в переменную file после выбора файла автоматически поместится его адрес
    QString file = QFileDialog::getOpenFileName(
    this,
    "Select one or more files to open",//заголовок открывающегося стандартного окна
    "/home");
    //каталог, который открывается при запуске

    //если прописать QDir :: currentPath (); то откроется каталог созданного приложения Qt с исполняемыми файлами программы

    //подключить БД по ее адресу на компьютере
    db.setDatabaseName(file);
    //открывает базу данных по адресу file
    db.open();
    model->setTable("basetable");//выбирается существующая табл БД
    //Возможны значения для редактирования записей:
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);//настраивается редактирование таблицы
    //model->setEditStrategy(QSqlTableModel::OnFieldChange);//данные сохранятся в БД сразу при переходе на другую ячейку
    //model->setEditStrategy(QSqlTableModel::OnRowChange);//данные сохранятся в БД сразу при переходе на другую строку
    model->select();//заполняет модель данными из таблицы, без этого кода выйдет пустая таблица
    ui->tableView->setModel(model);//выводит в виде таблицы все элементы в окне приложения
    }