LINUX.ORG.RU

Как правильно передать QPixmap в БД?

 


0

1

прототип:

void author_insert(const QSqlDatabase& dataBase, QString surname, QString firstname, QString description, const QPixmap& foto = QPixmap(":images/noauthor"));

реализация:

void author::author_insert(const QSqlDatabase &dataBase, QString surname, QString firstname, QString description,const QPixmap& foto){

    if(dataBase.isOpen()){
        QSqlQuery sql = QSqlQuery(dataBase);
        sql.exec(tr("SET NAMES 'UTF-8'"));
        sql.exec(tr("INSERT INTO author (surname,firstanme,description,foto) values(%1,%2,%3,%4)").arg(surname).arg(firstname).arg(description).arg(foto));
     }
}

Ошибка:

error: no matching function for call to 'QString::arg(const QPixmap&)'

★★★★★

Я, понимаю, что отвечаю на вопрос немного некорректно, но а почему бы не хранить Pixmap как картинку в файле, а в базе путь к ней?

TOXA ★★
()
Ответ на: комментарий от TOXA

это удобно, сохраняется целостность приложения и удобно вызывать ресурсы внутри кода, например по псевдонимам.

splinter ★★★★★
() автор топика

error: no matching function for call to 'QString::arg(const QPixmap&)'

всеж ясно написано, странно 5 звезд и читать не умеет.

Кто за тебя будет в QString преобразовывать объект класса QPixmap то?

MikeDM ★★★★★
()
Ответ на: комментарий от anonymous

ну мало ли, вдруг в QtSql поддержка 1C появится, или стандарт SQL на русский переведут например :)

Harald ★★★★★
()
Последнее исправление: Harald (всего исправлений: 1)
Ответ на: комментарий от splinter

это ж такой ад будет у переводчиков «переводить SQL запрос» они ж тебя к еб***матери пошлют сразу. если ты конечно в одну каску не пилишь свой проект.

QString(«Bla bla % bla bla»).arg(tr(«Гоголь»));

MikeDM ★★★★★
()
Ответ на: комментарий от splinter

По сабжу рекомендую почитать доку по SQL для Qt4

а потом понять, что надо читать файл в QByteArray и его уже скармливать в SQL запрос в BLOB тип столбца.

Но скажу тебе по секрету, это не очень хороший путь. А что пишешь то? Серьезное что то?

MikeDM ★★★★★
()
Ответ на: комментарий от MikeDM

не особенно, хочу помочь знакомому медику, сделать конструктор тестов, что бы можно было забивать более - менее произвольные тесты конструировать и выводить результаты по методам подсчета введенные тестировщиком, если начнет получаться что то более менее похожее на результат обязательно выложу в свободный доступ. Заодно изучаю кьют.

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

http://www.linux.org.ru/forum/development/9576620?cid=9576634 (комментарий)

http://www.qtcentre.org/threads/18064-Inserting-blob-into-mysql-using-QT
Re: Inserting blob into mysql using QT?
code to convert a QPixmap in a QByteArray

QByteArray BlobClass::convertPixmap(const QPixmap &pixmap)
{
    QByteArray bytes;
    QBuffer buffer(&bytes);
    buffer.open(QIODevice::WriteOnly);
    pixmap.save(&buffer, "PNG");
    return buffer.data();
}
anonymous
()
Ответ на: комментарий от splinter

не особенно, хочу помочь знакомому медику

черкни мне пару строк на почту, есть у меня для тебя предложение одно.

MikeDM ★★★★★
()
Ответ на: комментарий от MikeDM

читать файл в QByteArray и его уже скармливать в SQL запрос в BLOB тип столбца.
Но скажу тебе по секрету, это не очень хороший путь.

Почему не очень хороший? Довольно быстрый, простой и компактный в плане использования файловой системы. Если, конечно, записей с файлами не будет over 1 млн.

Suigintou ★★★★★
()
Ответ на: комментарий от anonymous

pixmap.save(&buffer, «PNG»);

В BMP сохраняется заметно быстрее. Но это если размер файла устраивает.

Suigintou ★★★★★
()
Ответ на: комментарий от Suigintou

Почему не очень хороший?

До тех пор пока у тебя 100 - 200 активных пользователей это прокатит. Как только у тебя в базу будут пихать 10 мб файлы 1000 пользователей ежедневно, базе капут.

MikeDM ★★★★★
()
Ответ на: комментарий от MikeDM

10 мб файлы

Это да. Но что мешает нарезать previewшки нужного размера и кидать их в базу? Не более 500кб на одну запись. Исходные картинки не сохранять вообще, или кидать в ФС в виде файлов, либо в отдельную базу, если они вдруг нужны.

Suigintou ★★★★★
()
Ответ на: комментарий от Suigintou

Вот о том и речь, что надо заранее проектировать систему под условия эксплуатации. А то потом будет очень все печально.

MikeDM ★★★★★
()
Ответ на: комментарий от splinter

нет .arg()

QString(«%1»).arg()

Пихать sql в файлы для локализации - это за гранью. Так же как и конструировать запрос через arg().

unC0Rr ★★★★★
()
Ответ на: комментарий от splinter

Забудь как страшный сон, читай доки. Сам сдуру поначалу купил Шлее, и десятка страниц не прочитал, проще разбираться, читая официальные доки.

unC0Rr ★★★★★
()
Ответ на: комментарий от splinter

Да просто чтобы что-то написать, проще писать, обращаясь к документации, нежели прочитать книгу и потом кодить. С другой стороны, книга может научить практикам, принятым в qt, так что смысл читать всё же есть.

unC0Rr ★★★★★
()

QPixmap - это плафторменно-зависимое изображение, его невозможно просто взять и передать в базу.

Конвертируешь в QImage, потом сейвишь в QBuffer, и полученный QByteArray пишешь блобом (только не подстановкой в query, а по-человечески, QSqlQuery::bindValue)

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.