QTreeWidget - setPixmap ???

Alles rund um die Programmierung mit Qt
Antworten
durbrak
Beiträge: 3
Registriert: 19. September 2006 16:31

QTreeWidget - setPixmap ???

Beitrag von durbrak »

Hallo,
in Qt3 hab ich immer QListView und QListViewItem::setPixmap() benutzt um in eine Zelle ein Bild statt Text zu setzen. Nun ist der Qt4 Ersatz für QListView ja QTreeWidget mit seinen QTreeWidgetItems... jedoch hat QTreeWidgetItem nichts wie setPixmap()... nur setIcon() und setData(0, Qt::DecorationRole, pixmap), aber diese verhalten sich als ob ich Icons setze statt Bildern.
Also mit setIcon() wird mein Bild auf 16x16 verkleinert (ich kann QTreeWidget::setIconSize() NICHT benutzen, da meine bilder alle unterschiedlich groß sind)... mit setData() (als DecorationRole) wird mein Bild nur dumm abgeschnitten und liegt irgendwo total falsch...
Wie kann man nun dieses "Problem" in Qt4 lösen?

Danke schon einmal für die Antworten im voraus!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Hier schon mal ein Ansatz:

Code: Alles auswählen

class PicList : public QAbstractListModel
{
Q_OBJECT
public:
	PicList(QObject *parent=0);
	~PicList();
	
	int rowCount(const QModelIndex &parent=QModelIndex()) const;
	QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const;
		
public slots:	
	void append(const QPixmap &pix);	
	
private:
	QList<QPixmap> m_pixmaps;	
};

Code: Alles auswählen

#include "piclist.h"

PicList::PicList(QObject *parent)
	: QAbstractListModel(parent)
{
}

PicList::~PicList()
{
}

int PicList::rowCount(const QModelIndex &/*parent*/) const
{
	return m_pixmaps.count();
}

QVariant PicList::data(const QModelIndex &index, int role) const 
{
	qDebug() << role;
	if (role==Qt::DisplayRole || role==Qt::DecorationRole) {
		return m_pixmaps.value(index.row());
	}
	
	if (role==Qt::SizeHintRole) {
		return m_pixmaps.value(index.row()).size();
	}
	
	return QVariant();
}

void PicList::append(const QPixmap &pix)
{
	beginInsertRows(QModelIndex(), m_pixmaps.count(), m_pixmaps.count()+1);
	m_pixmaps.append(pix);
	endInsertRows();
}

Code: Alles auswählen

QListView *list=new QListView(0);
PicList *pl=new PicList(list);
list->setModel(pl);
list->show();	pl->append(QPixmap("/usr/share/images/desktop-base/Debian.jpg"));
Antworten