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

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

Как на Qt создать пример программы с выводом информации в виде списка, дерева или таблицы

Создание ознакомительного примера проекта для вывода БД в виде таблицы, списка или дерева на Qt

    Для создания проекта следует:

  • открыть Qt Creator
  • выбрать пункт Qt Widgets Application
  • прописать название нового каталога для создаваемого приложения, к примеру fortabledb
  • компилятор Build system оставить по умолчанию qmake
  • классы и язык оставить по умолчанию
  • комплект Desktop Qt 5.14.2 GCC 64bit (default) оставить как есть
  • автоматически должны быть созданы файлы:fortabledb.pro, main.cpp, mainwindow.cpp, mainwindow.h и mainwindow.ui

Рабочий пример вывода информации из таблицы базы данных SQLite на Qt в виде списка, дерева или таблицы

Внимание: этот код представлен только для понимания основ работы с базой данных, эту программу можно сделать проще при использовании соответствующих классов!

    Для возможности работы с таблицей из базы данных следует:

  • в самом верху файла fortabledb.pro подключить класс для работы с SQL QT += sql
  • в файле mainwindow.h в класс class MainWindow : public QMainWindow добавить код, регистрирующий новую функцию/слот для работы:
    private slots:
    void workingdb();// это созданный нами слот для работы с БД
  • файл main.cpp менять не надо
  • в самом верху файла mainwindow.cpp подключить классы для работы с SQL
    #include "QSqlDatabase"//для работы с БД
    #include "QSqlQuery"//для работы с SQL запросами
    #include "QTableView"//для работы с графическим выводом информации в виде таблиц
    #include "QListView"//для работы с графическим выводом информации в виде списка
    #include "QTreeView"//для работы с графическим выводом информации в виде дерева
    #include "QStandardItemModel"//общий класс для создания и работы с моделями типов таблица, дерево и список
    #include "QStandardItem"//общий класс для создания и работы пунктов модели
    #include "QDebug"
    #include "QLabel"
  • в начале файла mainwindow.cpp создать глобальную переменную для подключения драйверов БД
    static QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// db - это внешняя глобальная переменная, которую можно использовать тво всех файлах программы
  • в функцию MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) добавить код/контроллер, который привязывает созданную кнопку к создаваемому коду
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(workingdb())); //для работы с БД
  • внизу этого файла прописываем само содержание функции:

  • //функция для работы с БД
    void MainWindow::workingdb(){

    //подключить БД по ее адресу на компьютере
    db.setDatabaseName("/home/mishanyya/fordbwork/examplebdfordbwork");
    //открывает базу данных, указанную в db.setDatabaseName("/home/mishanyya/fordbwork/examplebdfordbwork");
    db.open();

    //может пригодиться!
    //создает объект для запросов SQL
    QSqlQuery query( db );
    query.exec("SELECT * FROM basetable");
    //Вывод значений из БД
    query.next();

    QString value_0 = query.value(0).toString();//value(0)-элемент 0 массива вывода
    QString value_1 = query.value(1).toString();//value(1)-элемент 1 массива вывода
    QString value_2 = query.value(2).toString();//value(2)-элемент 2 массива вывода
    QString value_3 = query.value(3).toString();//value(3)-элемент 3 массива вывода

    QStandardItemModel *model = new QStandardItemModel;//создает модель класса QStandardItemModel
    QStandardItem *item;//создает разделы/ячейки в модели
    //Ячейки могут содержать текст, иконки и радиокнопки
    //По умолчанию разделы редактируемые, с возможностью выбора

    //заполняется таблица значениями по типу матрицы
    //начинаются координаты с левой верхней ячейки таблицы
    //model->setItem настройка каждого элемента item в модели
    //model->setItem(0, 0, item) означает 0 строка 0 ячейка, в ячейке содержится значение переменной item
    //задает координаты ячейки и ее значение

    item = new QStandardItem(QString(value_0));//помещение в модель значения value_0 - переменной со значением из БД
    //item = new QStandardItem(QString("0 строка 0 ячейка"));
    model->setItem(0, 0, item);
    //повторением этого кода заполняется каждая ячейка модели таблицы

    item = new QStandardItem(QString(value_1));//помещение в модель значения value_0 - переменной со значением из БД
    model->setItem(0, 1, item);
    item = new QStandardItem(QString(value_2));//помещение в модель значения value_0 - переменной со значением из БД
    model->setItem(1, 0, item);
    item = new QStandardItem(QString(value_3));//помещение в модель значения value_0 - переменной со значением из БД
    model->setItem(1,1, item);

    //model->setRowCount(11);//устанавливает 11 строк
    //model->setColumnCount(9);//устанавливает 9 столбцов

    //Создают заголовки столбцов таблицы с соответствующими названиями
    QStringList horizontalHeader;
    horizontalHeader.append("Первый");
    horizontalHeader.append("Второй");
    horizontalHeader.append("Третий");
    horizontalHeader.append("Четвертый");

    //Создают заголовки строк таблицы с соответствующими названиями
    QStringList verticalHeader;
    verticalHeader.append("Это Строка 0");
    verticalHeader.append("Это Строка 1");

    model->setHorizontalHeaderLabels(horizontalHeader);//добавляет в модель заголовки столбцов
    model->setVerticalHeaderLabels(verticalHeader);//добавляет в модель заголовки строк
    //без названий заголовки все равно будут, но с номерами 1,2,3 и т.д. вместо названий

    //вывести модель в элементе ui->tableView
    ui->tableView->setModel(model);//выводит в виде таблицы все элементы

    //вывести модель в элементе ui->listView
    ui->listView->setModel(model);//выводит в виде списка только первый столбец без названий столбцов и строк

    //вывести модель в элементе ui->treeView
    ui->treeView->setModel(model);//выводит в виде таблицы все элементы, без выделенных ячеек и имени строк

    //по умолчанию размеры ячеек фиксированны и содержимое обрезается
    ui->tableView->resizeRowsToContents();//расширяет ячейки таблицы до содержимого
    ui->tableView->resizeColumnsToContents();//расширяет ячейки таблицы до содержимого

    }

  • в файле mainwindow.ui необходимо создать визуальные элементы для работы этого кода из класса и с именем соответственно:
  • class=”QPushButton” name=”pushButton
  • class=”QTableView” name=”tableView
  • class=”QListView” name=”listView
  • class=”QTreeView” name=”treeView
  • class=”QLabel” name=”label

Как на Qt создать пример программы с выводом информации в виде списка, дерева или таблицы

Создание ознакомительного примера проекта для вывода БД в виде таблицы, списка или дерева на Qt

    Для создания проекта следует:

  • открыть Qt Creator
  • выбрать пункт Qt Widgets Application
  • прописать название нового каталога для создаваемого приложения, к примеру fortabledb
  • компилятор Build system оставить по умолчанию qmake
  • классы и язык оставить по умолчанию
  • комплект Desktop Qt 5.14.2 GCC 64bit (default) оставить как есть
  • автоматически должны быть созданы файлы:fortabledb.pro, main.cpp, mainwindow.cpp, mainwindow.h и mainwindow.ui

Рабочий пример вывода информации из таблицы базы данных SQLite на Qt в виде списка, дерева или таблицы

Внимание: этот код представлен только для понимания основ работы с базой данных, эту программу можно сделать проще при использовании соответствующих классов!

    Для возможности работы с таблицей из базы данных следует:

  • в самом верху файла fortabledb.pro подключить класс для работы с SQL QT += sql
  • в файле mainwindow.h в класс class MainWindow : public QMainWindow добавить код, регистрирующий новую функцию/слот для работы:
    private slots:
    void workingdb();// это созданный нами слот для работы с БД
  • файл main.cpp менять не надо
  • в самом верху файла mainwindow.cpp подключить классы для работы с SQL
    #include "QSqlDatabase"//для работы с БД
    #include "QSqlQuery"//для работы с SQL запросами
    #include "QTableView"//для работы с графическим выводом информации в виде таблиц
    #include "QListView"//для работы с графическим выводом информации в виде списка
    #include "QTreeView"//для работы с графическим выводом информации в виде дерева
    #include "QStandardItemModel"//общий класс для создания и работы с моделями типов таблица, дерево и список
    #include "QStandardItem"//общий класс для создания и работы пунктов модели
    #include "QDebug"
    #include "QLabel"
  • в начале файла mainwindow.cpp создать глобальную переменную для подключения драйверов БД
    static QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");// db - это внешняя глобальная переменная, которую можно использовать тво всех файлах программы
  • в функцию MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) добавить код/контроллер, который привязывает созданную кнопку к создаваемому коду
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(workingdb())); //для работы с БД
  • внизу этого файла прописываем само содержание функции:

  • //функция для работы с БД
    void MainWindow::workingdb(){

    //подключить БД по ее адресу на компьютере
    db.setDatabaseName("/home/mishanyya/fordbwork/examplebdfordbwork");
    //открывает базу данных, указанную в db.setDatabaseName("/home/mishanyya/fordbwork/examplebdfordbwork");
    db.open();

    //может пригодиться!
    //создает объект для запросов SQL
    QSqlQuery query( db );
    query.exec("SELECT * FROM basetable");
    //Вывод значений из БД
    query.next();

    QString value_0 = query.value(0).toString();//value(0)-элемент 0 массива вывода
    QString value_1 = query.value(1).toString();//value(1)-элемент 1 массива вывода
    QString value_2 = query.value(2).toString();//value(2)-элемент 2 массива вывода
    QString value_3 = query.value(3).toString();//value(3)-элемент 3 массива вывода

    QStandardItemModel *model = new QStandardItemModel;//создает модель класса QStandardItemModel
    QStandardItem *item;//создает разделы/ячейки в модели
    //Ячейки могут содержать текст, иконки и радиокнопки
    //По умолчанию разделы редактируемые, с возможностью выбора

    //заполняется таблица значениями по типу матрицы
    //начинаются координаты с левой верхней ячейки таблицы
    //model->setItem настройка каждого элемента item в модели
    //model->setItem(0, 0, item) означает 0 строка 0 ячейка, в ячейке содержится значение переменной item
    //задает координаты ячейки и ее значение

    item = new QStandardItem(QString(value_0));//помещение в модель значения value_0 - переменной со значением из БД
    //item = new QStandardItem(QString("0 строка 0 ячейка"));
    model->setItem(0, 0, item);
    //повторением этого кода заполняется каждая ячейка модели таблицы

    item = new QStandardItem(QString(value_1));//помещение в модель значения value_0 - переменной со значением из БД
    model->setItem(0, 1, item);
    item = new QStandardItem(QString(value_2));//помещение в модель значения value_0 - переменной со значением из БД
    model->setItem(1, 0, item);
    item = new QStandardItem(QString(value_3));//помещение в модель значения value_0 - переменной со значением из БД
    model->setItem(1,1, item);

    //model->setRowCount(11);//устанавливает 11 строк
    //model->setColumnCount(9);//устанавливает 9 столбцов

    //Создают заголовки столбцов таблицы с соответствующими названиями
    QStringList horizontalHeader;
    horizontalHeader.append("Первый");
    horizontalHeader.append("Второй");
    horizontalHeader.append("Третий");
    horizontalHeader.append("Четвертый");

    //Создают заголовки строк таблицы с соответствующими названиями
    QStringList verticalHeader;
    verticalHeader.append("Это Строка 0");
    verticalHeader.append("Это Строка 1");

    model->setHorizontalHeaderLabels(horizontalHeader);//добавляет в модель заголовки столбцов
    model->setVerticalHeaderLabels(verticalHeader);//добавляет в модель заголовки строк
    //без названий заголовки все равно будут, но с номерами 1,2,3 и т.д. вместо названий

    //вывести модель в элементе ui->tableView
    ui->tableView->setModel(model);//выводит в виде таблицы все элементы

    //вывести модель в элементе ui->listView
    ui->listView->setModel(model);//выводит в виде списка только первый столбец без названий столбцов и строк

    //вывести модель в элементе ui->treeView
    ui->treeView->setModel(model);//выводит в виде таблицы все элементы, без выделенных ячеек и имени строк

    //по умолчанию размеры ячеек фиксированны и содержимое обрезается
    ui->tableView->resizeRowsToContents();//расширяет ячейки таблицы до содержимого
    ui->tableView->resizeColumnsToContents();//расширяет ячейки таблицы до содержимого

    }

  • в файле mainwindow.ui необходимо создать визуальные элементы для работы этого кода из класса и с именем соответственно:
  • class=”QPushButton” name=”pushButton
  • class=”QTableView” name=”tableView
  • class=”QListView” name=”listView
  • class=”QTreeView” name=”treeView
  • class=”QLabel” name=”label