Seite 1 von 1

Bild in TreeWidget einbinden

Verfasst: 30. Oktober 2008 07:39
von nexus
Damit meine ich jetzt nicht ein Icon sondern bspw. ein 100x100 Pixel großes Bild in einer Spalte. Geht das irgendwie oder kann man das alternativ umsetzen?

Verfasst: 30. Oktober 2008 09:03
von upsala
Sicher geht das. Bau dir ein entsprechendes QItemDelegate.

Verfasst: 30. Oktober 2008 13:11
von nexus
Danke. Werd mir die Klasse mal anschauen

Verfasst: 16. November 2008 16:34
von nexus
So hab endlich mal die Zeit gefunden mich damit auseinanderzusetzen, jedoch komm ich nicht weiter. Hier erstmal mein Code:

Code: Alles auswählen

#ifndef TESTDELEGATE2_H
#define TESTDELEGATE2_H

#include <QtGui/QWidget>
#include <QItemDelegate>
#include "ui_testdelegate2.h"

class TestDelegate2: public QWidget {
	Q_OBJECT

	public:
		TestDelegate2(QWidget *parent = 0);
		~TestDelegate2();

	private:
		Ui::TestDelegate2Class ui;
};

class TestDelegate: public QItemDelegate {

		public:
		TestDelegate(QObject *parent = 0);

		void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};

#endif // TESTDELEGATE2_H

Code: Alles auswählen

#include "testdelegate2.h"
#include <QPainter>
#include <QAbstractItemModel>

TestDelegate2::TestDelegate2(QWidget *parent) :
	QWidget(parent) {
	ui.setupUi(this);

	QAbstractItemModel *model = ui.treeWidget->model();

	TestDelegate delegate;
	ui.treeWidget->setItemDelegate(&delegate);

	QImage *blah = new QImage("D:\\Eclipse Workspace\\MyMDb\\icons\\info.png");

	model->setData(??? , blah);
}

TestDelegate2::~TestDelegate2() {

}

TestDelegate::TestDelegate(QObject *parent) :
	QItemDelegate(parent) {
}

void TestDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
		const QModelIndex &index) const {

	painter->drawImage(QRect(0, 0, 50, 50), index.data().value<QImage>(), QRect(0, 0, 50, 50));

}
Mein Problem liegt jetzt beim "model->setData()" als erstes Argument wird ja ein QModelIndex verlangt. Gut, aber "model->index()" verlangt als einen parameter wieder ein QModelIndex... versteh das irgendwie nicht :(

Verfasst: 16. November 2008 19:18
von upsala
Du hatest doch ein QTreeWidget. Verwende halt

Code: Alles auswählen

void QTreeWidgetItem::setData ( int column, int role, const QVariant & value )

Verfasst: 16. November 2008 23:02
von nexus
Habs jetzt so, aber es wird nichts angezeigt. Nichtmal der text in der zweiten Spalte...

Code: Alles auswählen

TestDelegate2::TestDelegate2(QWidget *parent) :
	QWidget(parent) {
	ui.setupUi(this);

	TestDelegate delegate;
	ui.treeWidget->setItemDelegate(&delegate);

	QImage *blah = new QImage("D:\\Eclipse Workspace\\MyMDb\\icons\\info.png");

	QTreeWidgetItem item;
	item.setData(0,0, blah);
	item.setData(1,0, "test text");

	ui.treeWidget->insertTopLevelItem(0, &item);
}

Verfasst: 17. November 2008 09:02
von upsala
Du kannst froh sein, daß dir dein Programm nicht abstürzt. Schau dir mal den Lebenszyklus deiner Referenzen an.

Verfasst: 18. November 2008 11:20
von nexus
Habs geändert. Jedoch wird noch immer nichts angezeigt. Wenn ich jedoch der Painter-Funktion direkt den Pfad das Image übergebe wird zwar das Bild, aber auch kein Text angezeigt.

Code: Alles auswählen

painter->drawImage(QRect(0, 0, 50, 50), QImage("D:\\Eclipse Workspace\\MyMDb\\icons\\info.png"), QRect(0, 0, 50, 50)); 

Verfasst: 18. November 2008 20:44
von upsala
Du lässt ja auch nie einen Text zeichnen, also kann auch keiner angezeigt werden. Außerdem wird bei drawImage kein Pointer auf ein Image verlangt, achte doch mal darauf wann du Zeiger und wann du Referenzen verwendest.

Verfasst: 18. November 2008 21:13
von nexus
Ich dachte das Item wird eingefügt und das Image an der angegebenen Position gezeichnet...