Как связаны первый и второй кусок кода?
Причем
query.value(1).toByteArray()
К первому классу? К получению картинки? Это ж сиквелевский запрос, так ведь? Откуда нам знать что и как ты сохранил в базе, да еще и в первом поле...
Весь код выложить - много места а в этом поле PNG картинка
CREATE OR REPLACE FUNCTION insert_img(bytea)
RETURNS character varying AS
$BODY$DECLARE
_img ALIAS FOR $1;
BEGIN
INSERT INTO images( img ) VALUES( _img );
RETURN '';
END$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION insert_img(bytea) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION insert_img(bytea) TO postgres;
GRANT EXECUTE ON FUNCTION insert_img(bytea) TO public;
И при использовании QTreeWidgetItem она отображается правильно.
А при собственной реализации модели и использовании QTreeView нет.
добавлено спустя 12 минут: а код это вот ... типа урезанной версии (только стерео вместо 7.1)
#include <QString>
#include <QIcon>
#include <QDate>
//
class QMyJobNode
{
public:
enum TypeJob {jobPlanned, jobExecute, jobNoExecute, jobEndExecute };
...
bool jobExecuteOthers;
int id;
QMyJobNode *parent;
QList<QMyJobNode *> children;
};
#include "qmyjobnode.h"
//
QMyJobNode::QMyJobNode( TypeJob p_type,
const QString &p_jobName, // Название работы
const QIcon &p_icon, // Иконка приоритета
....
const bool &p_jobExecuteOthers, // Признак выполнения работы на стороне
const int &p_id ) // Уникальный идентификатор )
{
this->type = p_type;
this->jobName = p_jobName;
this->icon = p_icon;
this->planDayNumber = p_planDayNumber;
this->planDateBegin = p_planDateBegin;
this->planDateEnd = p_planDateEnd;
this->faktDateBegin = p_faktDateBegin;
this->faktDateEnd = p_faktDateEnd;
this->procExecute = p_procExecute;
this->dayInMonth = p_dayInMonth;
this->jobExecuteOthers = p_jobExecuteOthers;
this->id = p_id;
parent = 0;
}
//
QMyJobNode::~QMyJobNode()
{
qDeleteAll(children);
}
далее модель:
class QMyJobTreeModel : public QAbstractItemModel
{
Q_OBJECT
public:
QMyJobTreeModel(QObject *parent = 0);
virtual ~QMyJobTreeModel();
void setRootNode(QMyJobNode *node);
void setup(QMyJobNode *node = 0, int id = 0);
QModelIndex index(int row, int column, const QModelIndex &parent) const;
QModelIndex parent(const QModelIndex &child) const;
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
private:
QMyJobNode *nodeFromIndex(const QModelIndex &index) const;
QMyJobNode *rootNode;
};
и кусок заполнения:
...
QPixmap pixmap;
QSqlQuery query;
query.exec( QString("SELECT * FROM rab_view_002 WHERE p_id=%1").arg(id) );
while (query.next())
{
const QString p1 = query.value(0).toString();
pixmap.loadFromData( query.value(1).toByteArray() );
const QIcon p2 = QIcon(pixmap);
const int p3 = query.value(2).toInt();
const QDate p4 = query.value(3).toDate();
const QDate p5 = query.value(4).toDate();
const QDate p6 = query.value(5).toDate();
const QDate p7 = query.value(6).toDate();
const int p8 = query.value(7).toInt();
const int p9 = query.value(8).toInt();
const bool p10 = query.value(9).toBool();
const int p11 = query.value(10).toInt();
QMyJobNode *Node = new QMyJobNode( QMyJobNode::jobPlanned, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 );
Node->parent = node;
node->children.append( Node );
....
добавлено спустя 15 минут: а заливалось вот так .... if (!win.label->pixmap()->isNull())
{
QByteArray bytes;
const QPixmap *pixmap = win.label->pixmap();
QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly);
pixmap->save(&buffer, "PNG");
query.prepare("SELECT * FROM insert_img(:photo)");
query.bindValue(":photo", bytes);
query.exec();
}