[gelöst] Wordcloud -> Textbreite?

Alles rund um die Programmierung mit Qt
Antworten
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

[gelöst] Wordcloud -> Textbreite?

Beitrag von Hulk2442 »

Hi
Ich möchte für eine Anwendung eine Wordcloud programmieren.
Da die Wörter geklickt werden sollen dachte ich an einzelnen Labels welche in einem verschachtelten Layout angeordnet werden.

Mein Problem ist das ich zum Zeitpunkt der Erstellung nicht die wirklich Labelbreite erhalte.

Beispiel:
main.cc

Code: Alles auswählen

#include <QApplication>

#include "CWindow.hh"

int main( int argc, char * argv[] )
{
	QApplication app(argc, argv);

	CWindow *pWin = new CWindow;
	pWin->setMinimumSize(640, 480);

	pWin->addText("ASDF");

	pWin->show();

	return app.exec();
}
CWindow.cc

Code: Alles auswählen

#include "CWindow.hh"

CWindow::CWindow()
{
	pLayout = new QHBoxLayout;
	pLayout->setMargin(0);
	pLayout->setSpacing(0);

	this->setLayout(pLayout);
}

CWindow::~CWindow()
{

}

void CWindow::addText(QString strText)
{
	pTextLabel = new QLabel;
	pTextLabel->setFrameStyle(QFrame::Box | QFrame::Plain);
	// 1 // pTextLabel->setSizePolicy(QSizePolicy::Minimum,QSizePolicy::Minimum);
	// 2 // pTextLabel->setSizePolicy(QSizePolicy::Maximum,QSizePolicy::Maximum);	//wird nur kleiner gezeichnet
	// 3 // pTextLabel->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);		//wird nur kleiner gezeichnet
	pTextLabel->setText(strText);

	pWidthLabel = new QLabel;
	pWidthLabel->setFrameStyle(QFrame::Box | QFrame::Plain);
	pWidthLabel->setText( QString::number(pTextLabel->width()) );

	pLayout->addWidget(pTextLabel);
	pLayout->addWidget(pWidthLabel);
}
CWindow.hh

Code: Alles auswählen

#ifndef CWINDOW_HH
#define CWINDOW_HH

#include <QWidget>
#include <QHBoxLayout>
#include <QLabel>

class CWindow : public QWidget
{
	public:
		CWindow();
		~CWindow();

		void addText(QString strText);

	private:
		QHBoxLayout *pLayout;
		QLabel *pTextLabel;
		QLabel *pWidthLabel;
};

#endif // CWINDOW_HH

Bis dato habe ich solche Probleme so gelöst das ich die Breite geschätzt und mit der Anzahl der Buchstaben mir die ungefähre Größe ausgerechnet hatte.
Diese Methode funktioniert nicht wenn in Zukunft die Wörter noch unterschiedliche Größen haben sollen.

Wie kann ich die breite eines Labels oder des sich darin befindenden Textes erhalten?
Zuletzt geändert von Hulk2442 am 13. Oktober 2009 11:14, insgesamt 1-mal geändert.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Beitrag von Hulk2442 »

THX
Genau danach habe ich gesucht!

Fals es jemanden interresiert hier ist die Lösung
Einfach die Funktion addText in CWindow.cc durch diese hier ersetzen
sowie QFont und QFontMetrics im CWindow.hh includieren

Code: Alles auswählen

void CWindow::addText(QString strText)
{
	QFont font("times", 12);

	pTextLabel = new QLabel;
	pTextLabel->setFrameStyle(QFrame::Box | QFrame::Plain);
	pTextLabel->setFont(font);
	pTextLabel->setText(strText);

	pWidthLabel = new QLabel;
	pWidthLabel->setFrameStyle(QFrame::Box | QFrame::Plain);

	QFontMetrics fm(font);
	int iWidth = fm.width(strText);
	pWidthLabel->setText( QString::number(iWidth) );

	pLayout->addWidget(pTextLabel);
	pLayout->addWidget(pWidthLabel);
}
Antworten