Отображение BLOB из базы данных и обновление изображения в QTableView - PullRequest
0 голосов
/ 07 января 2019

Я родом из Java. У меня есть рабочие знания C ++. Я учусь использовать QT. Я создаю простое приложение для создания, чтения, обновления, удаления и поиска записей с базой данных Mysql. Я использую QtableView для отображения моих данных. До сих пор я успешно завершил все, кроме отображения изображений и редактирования изображений в QTableView. Я сохранил изображение как ByteArray.

Я пробовал несколько вещей, включая использование делегатов и QStandardItemModel, но мне это не удалось. Может быть, я сделал несколько ошибок. Ниже мой код для файла canvas.cpp. Я был бы очень признателен за помощь или руководство, как решить мою проблему. Я не мог найти смысла в документации Qt, но не из-за отсутствия попыток.

#include "canvas.h"
#include "ui_canvas.h"
#include <QListWidgetItem>

Canvas::Canvas(QWidget *parent) :
QDialog(parent),
ui(new Ui::Canvas)
{
ui->setupUi(this);

retrieveEngine = QSqlDatabase::addDatabase("QMYSQL");
retrieveEngine.setHostName("localhost");
retrieveEngine.setUserName("root");
retrieveEngine.setPassword("");
retrieveEngine.setDatabaseName("qtmitmysql");

if(retrieveEngine.open()){
    queryModel = new QSqlQueryModel();
    queryModel->setQuery("SELECT * FROM users");
    ui->tableView->setModel(queryModel);
}else
    QMessageBox::information(this, "Verbindung gescheitrt",
                      "Die Verbindung mit der Datenbank war nicht 
                                        erfolgreich");

    tableModel = new QSqlTableModel(this, retrieveEngine);
    tableModel->setTable("users");
    tableModel->select();
    qDebug() << tableModel->lastError().text();
    ui->tableView->setModel(tableModel);

    tableModel->setEditStrategy(QSqlTableModel::OnFieldChange);
    ui->tableView->hideColumn(0);
}

Canvas::~Canvas()
{
retrieveEngine.close();
delete ui;
}

void Canvas::on_searchBox_textChanged(const QString &arg1)
{
filterProxy = new QSortFilterProxyModel(this);
filterProxy->setSourceModel(tableModel);
filterProxy->setFilterCaseSensitivity(Qt::CaseInsensitive);
filterProxy->setFilterKeyColumn(-1);
filterProxy->setFilterFixedString(arg1);

ui->tableView->setModel(filterProxy);
}

void Canvas::on_removeThisRecord_clicked()
{
    QModelIndexList selectedIndexes = ui->tableView->selectionModel()- 
     >selectedIndexes();
    Q_ASSERT(std::equal(selectedIndexes.constBegin()+1,
                        selectedIndexes.constEnd(),
                        selectedIndexes.constBegin(),[](
                        const QModelIndex& a,
                        const QModelIndex& b)->bool{return 
a.parent()==b.parent();}));
    std::sort( selectedIndexes.begin(),
               selectedIndexes.end(),[](
               const QModelIndex& a,
               const QModelIndex& b)->bool{return b.row()<a.row();});
    QSet<int> deletedRows;
    for(auto i = 
selectedIndexes.constBegin();i!=selectedIndexes.constEnd();++i){
        if(deletedRows.contains(i->row()))
            continue;
        if(ui->tableView->model()->removeRow(i->row(),i->parent()))
            deletedRows << i->row();
    }
 }
...