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();
}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);
}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?