Я родом из 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();
}
}