Bild in TreeWidget einbinden

Alles rund um die Programmierung mit Qt
Antworten
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Bild in TreeWidget einbinden

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Sicher geht das. Bau dir ein entsprechendes QItemDelegate.
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

Danke. Werd mir die Klasse mal anschauen
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag 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 :(
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du hatest doch ein QTreeWidget. Verwende halt

Code: Alles auswählen

void QTreeWidgetItem::setData ( int column, int role, const QVariant & value )
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag 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);
}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du kannst froh sein, daß dir dein Programm nicht abstürzt. Schau dir mal den Lebenszyklus deiner Referenzen an.
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag 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)); 
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
nexus
Beiträge: 75
Registriert: 14. Oktober 2006 19:24

Beitrag von nexus »

Ich dachte das Item wird eingefügt und das Image an der angegebenen Position gezeichnet...
Antworten