QSqlTableModel и QSQLITE не показывают правильные столбцы и заголовок - PullRequest
0 голосов
/ 26 марта 2019

В пользовательском интерфейсе у меня есть QTableView, который выглядит так в самом начале после первого запуска:

QTableView

Как только пользователь запустит проект и создастновая база данных .db (скажем, пользователь помещает файл .db на рабочий стол), эта QTableView выглядит так, что правильное поведение :

Correct_QTableView

Проблема: После того, как я начинаю сохранять изображения и их путь, все заголовки имеют разные имена (1,2,3,4) вместо (path1, path2, image1, image2), как показано ранее, ипропущен столбец id, как показано ниже, где указано неправильное поведение :

wrong

Ниже описан порядок настройки наиболее важных параметров:

mainwindow.h

private:
    QString temporaryFolder;
    dataInfo *mNewDatabaseImages;
    QSqlTableModel *mNewTableImages;
    QStandardItemModel *model;

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    temporaryFolder = "/home/path/toDesktop/folder/a.db";
    QFile dbRem(temporaryFolder);
    dbRem.remove();

    mNewDatabaseImages = new dataInfo(this);
    mNewDatabaseImages->initDataBase(temporaryFolder);
    mNewDatabaseImages->confDataBase();
    mNewTableImages = new QSqlTableModel(this, mNewDatabaseImages->getDatabase());
    mNewTableImages->setTable("imageTable");
    mNewTableImages->select();
    ui->bookMarkTableView->setModel(mNewTableImages);

    model = new QStandardItemModel();
    ui->bookMarkTableView->setModel(model);
    ui->bookMarkTableView->showColumn(true);
}

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

icons

Эта часть находится также в mainwindow.cpp , а ниже приведен фрагмент кода:

void MainWindow::openDatabase(MainWindow::Opening opening)
{
    QString nameDatabase;
    if(opening == OPENING) {
        nameDatabase = QFileDialog::getOpenFileName(this,
                                                    "Open Database", QDir::rootPath(),
                                                    "Database (*.db);;Any type (*.*)");
    } else {
        nameDatabase = QFileDialog::getSaveFileName(this,
                                                    "New Database", QDir::rootPath(),
                                                    "Database (*.db);;Any type (*.*)");
    }
    if(nameDatabase.isEmpty()) {
        return;
    }
    if(!mNewDatabaseImages->initDataBase(nameDatabase)) {
        QMessageBox::critical(this, "Error", mNewDatabaseImages->getError());
        return;
    }
    if(!mNewDatabaseImages->confDataBase()) {
        QMessageBox::critical(this, "Error", mNewDatabaseImages->getError());
        return;
    }
    delete mNewTableImages;
    // Work with the database file created
    mNewTableImages = new QSqlTableModel(this, mNewDatabaseImages->getDatabase());
    mNewTableImages->setTable("imageTable");
    mNewTableImages->select();
    ui->bookMarkTableView->setModel(mNewTableImages);
    ui->bookMarkTableView->showColumn(true);
}

База данных, которую я использую: QSQLITE и способSQL здесь написано здесь если есть необходимость увидеть фрагмент этого тоже.

Почему QTableView не показывает правильные заголовки и столбцы?

Спасибо за указание в правильном направлении.

1 Ответ

0 голосов
/ 26 марта 2019

Это потому, что вы перезаписываете его новым QStandardItemModel, поэтому при каждом запуске программы все заголовки исчезают.Попробуйте изменить конструктор, закомментировав последние три строки следующим образом:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    temporaryFolder = "/home/path/toDesktop/folder/a.db";
    QFile dbRem(temporaryFolder);
    dbRem.remove();

    mNewDatabaseImages = new dataInfo(this);
    mNewDatabaseImages->initDataBase(temporaryFolder);
    mNewDatabaseImages->confDataBase();
    mNewTableImages = new QSqlTableModel(this, mNewDatabaseImages->getDatabase());
    mNewTableImages->setTable("imageTable");
    mNewTableImages->select();
    ui->bookMarkTableView->setModel(mNewTableImages);


    // In this way you don't overwrite your initial headers

    //  model = new QStandardItemModel();
    //  ui->bookMarkTableView->setModel(model);
    //  ui->bookMarkTableView->showColumn(true);
}
...