Icon-Größe im QTabWidget einstellen.

Alles rund um die Programmierung mit Qt
Antworten
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Icon-Größe im QTabWidget einstellen.

Beitrag von slash-ex »

Ich wollte gerne wissen, wie ich es hin bekomme die Icons in der Liste etwas größer darzustellen. Ich dachte da so an 128x128 Pixel. Denn im Moment werden die scheinbar auf Textgröße heruntergerechnet?!
Das ist wichtig weil ich mir ein Icon-basiertes Tab bauen wollte.

Code: Alles auswählen

QIconTab::QIconTab(QListWidget *parent) : QListWidget(parent)
{
	IconList = new QListWidget(this);
	IconList->setLayoutMode();
}

void QIconTab::addItem(QString pixmap, QString text)
{
	QIcon icon(*(new QPixmap(pixmap) ) );
	
	QListWidgetItem *LWItem = new QListWidgetItem(icon, text);
	IconList->addItem(LWItem);
}
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Findest du 128x128 Pixel nicht ein bißchen groß für ein Tab?
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

Ich habe etwas weiter probiert. So nun habe ich immer noch das Problem, das ich die Icons nicht größer kriege. Allerdings frage ich mich auch warum das QLabel nicht in das Layout eingebettet wird. Es öffnet sich nämlich in einem seperaten Fensterchen...

Code: Alles auswählen

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "ITab.h"


QIconTab::QIconTab(QWidget *parent) : QWidget(parent)
{
	QGroupBox *mainBox = new QGroupBox(this);
	QHBoxLayout *mainlayout = new QHBoxLayout;

	IconList = new QListWidget;
	activeWidget = new QWidget(this);
	WidgetMap = new QMap<QListWidgetItem, QWidget*>;

	QIconTab::Connector();

	mainlayout->addWidget(IconList);
	mainlayout->addWidget(activeWidget);
	mainBox->setLayout(mainlayout);

	//ab hier weg
	QLabel *l1 = new QLabel("hallo");
	QLabel *l2 = new QLabel("hallo duda");
	addItem("/opt/kde/share/icons/default.kde/128x128/apps/baghira_blue.png", "Baghira", l1);
	addItem("/opt/kde/share/icons/default.kde/128x128/apps/background.png", "Background", l2);
}

void QIconTab::addItem(QString pixmap, QString text, QWidget *child)
{
	QIcon icon(*(new QPixmap(pixmap) ) );
	QListWidgetItem *LWItem = new QListWidgetItem(icon, text);

	IconList->addItem(LWItem);		//adding items to list
	WidgetMap->insert(*LWItem, child);	//builing a map for handling widgets in a tab
}

void QIconTab::Connector()
{
	QObject::connect(IconList, SIGNAL(itemPressed(QListWidgetItem*) ), this, SLOT(showWidget(QListWidgetItem*) ) );
}

void QIconTab::hideUnselected()
{
	QList<QWidget*> *widgetList = new QList<QWidget*>;
	*widgetList = WidgetMap->values();

	for(int i = 0; i < widgetList->size(); i++)
	{
		if(widgetList->at(i) != activeWidget)
			widgetList->at(i)->hide();
	}
}

//SLOTS
void QIconTab::showWidget(QListWidgetItem *item)
{
	activeWidget = WidgetMap->value(*item);
	hideUnselected();
	activeWidget->show();
}

Findest du 128x128 Pixel nicht ein bißchen groß für ein Tab?
ich will sowas machen:
http://de.kde-apps.org/content/preview. ... +Generator
Einmaliger
Beiträge: 48
Registriert: 22. Juli 2006 11:42

Beitrag von Einmaliger »

slash-ex hat geschrieben:ich will sowas machen:
http://de.kde-apps.org/content/preview. ... +Generator
Lad dir doch einfach den Quellcode von dem Programm runter und sieh nach, wie es dort gemacht wurde. Ist doch alles Open Source!
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

bei mir ist die lösung eleganter, er hat die dinger widget-spezifisch verteckt und wieder sichtbar gemacht, also für alle acht "tabs" und damit viel code investiert. außerdem muss das ganze für jedes programm angepasst werden und kann nicht portiert werden.

ich wollte eine allgemein anwendbare klasse bauen und wundere mich hier warum das label nicht in das layout rutscht?! und warum man mir nicht anwortet? habe ich hier irgendwas falsch gemacht.

da ich mir jetzt nicht mehr so sicher bin ob ih meinen code-snippet versteht:

Code: Alles auswählen

	//ab hier weg
	QLabel *l1 = new QLabel("hallo");
	QLabel *l2 = new QLabel("hallo duda");
	addItem("/opt/kde/share/icons/default.kde/128x128/apps/baghira_blue.png", "Baghira", l1);
	addItem("/opt/kde/share/icons/default.kde/128x128/apps/background.png", "Background", l2);
das hier ist nur um euch das problem zu demonstrieren. meine klasse soll stylisher werden als das bisherige tab, also schaut euch das screeny an. anzumerken ist jedoch, dass ich wie gesagt probleme habe die icons zu vergrößern. danach würde ich mich mehr mit dem layout beschäftigen. am wichtigsten ist aber, die frage warum das scheiß BEISPIEL LABEL nich im selben fenster ist wie die Liste?
was sagt ihr eigentlich zu meinem ansatz? ist er geklungen oder nicht. und bitte keine weiteren sprüche wie "sind 128 pixel nicht zu groß, oder: schau doch im beispiel (link)"
ICH HABE MIR DAS BEISPIEL ANGSCHAUT
Dateianhänge
hier sieht man das problem mit dem layout
hier sieht man das problem mit dem layout
prg1.png (206.36 KiB) 4612 mal betrachtet
hier sieht man das ziel ich wollte ein kontrolcenter bauen und meine netzwerkverändernde klasse integrieren..
hier sieht man das ziel ich wollte ein kontrolcenter bauen und meine netzwerkverändernde klasse integrieren..
prg2.png (153.01 KiB) 4612 mal betrachtet
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

weiß denn niemand warum das label aus dem fenster fliegt?

ich habe doch ein

Code: Alles auswählen

activeWidget = new QWidget;
das ist in einem layout:

Code: Alles auswählen

mainlayout->addWidget(activeWidget);
das bekommt ein label zugewiesen:

Code: Alles auswählen

void QIconTab::showWidget(QListWidgetItem *item)
{
   activeWidget = WidgetMap->value(*item); 
...
inegriert sich aber nicht in das layout, sondern ist in einem neuen fenster. warum?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wann erfährt das mainlayout für welches Widget es zuständig ist? Vor oder nach dem hinzufügen der Childs?
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

Wann erfährt das mainlayout für welches Widget es zuständig ist? Vor oder nach dem hinzufügen der Childs?
Ich denke du kennst die Antwort?!

Code: Alles auswählen

	mainlayout->addWidget(IconList);
	mainlayout->addWidget(activeWidget);
Aber das obere Konstrukt fügt doch das Widget "IconList" und "activeWidget" in das Layout, dass heißt das mainlayout verwaltet beide! Nur dass das "activeWidget" zur Laufzeit verändert wird. Wo ist jetzt das Problem? Ich mag keine rhetorischen Fragen.
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

void QIconTab::showWidget(QListWidgetItem *item)
{
activeWidget = WidgetMap->value(*item);
hideUnselected();
mainlayout->addWidget(activeWidget);
activeWidget->show();
}
damit klappt jetzt, die ganze sache. wie angenommen scheint es daran zu liegen, dass ein layout bei bedarf geändert werden muss... ich frage mich nur warum ein neues fenster entstanden ist????

so weiß nun jemand wie man die icon größe ändert?
Antworten