QScrollArea Problem

Alles rund um die Programmierung mit Qt
Antworten
michbex
Beiträge: 23
Registriert: 31. Mai 2006 15:53
Wohnort: Princeton
Kontaktdaten:

QScrollArea Problem

Beitrag von michbex »

Hi,

ich habe ein Widget, abgeleitet von QScrollarea.
Darin erzeuge ich zur laufzeit diverse andere widget, die ich in ein vertikales Layout hinzufuege. Wenn es zuviele Widgets sind, sollte die Area zu scrollen beginnen, tut sie aber nicht.

So sieht mein Konstruktor aus:

Code: Alles auswählen

MyWidget::MyWidget(QWidget* parent):QScrollArea(parent)
{
	this->setAcceptDrops(true);
	vBox = new QVBoxLayout();
	vBox->setSpacing(2);
	vBox->setMargin(0);
	this->setLayout(vBox);
	QPalette pal = this->palette();
	pal.setColor(QPalette::Base, QColor(191,189,220));
	this->setPalette(pal);
}
Any idea?

Michael
FinalFantasy
Beiträge: 6
Registriert: 4. August 2006 09:06

Beitrag von FinalFantasy »

Also so wie ich das sehen, ordnest du der ScrollArea das Layout zu...
Eine ScrollArea beinhaltet aber einen Widget, welcher quasi gescrollt wird.
Diesem Widget musst du das Layout zuordnen und den Widget dann der ScrollArea.
so ungefähr:

Code: Alles auswählen

MyWidget::MyWidget(QWidget* parent):QScrollArea(parent) 
{ 
   this->setAcceptDrops(true); 
   QWidget* scrollWidget = new QWidget(this);
   vBox = new QVBoxLayout(); 
   vBox->setSpacing(2); 
   vBox->setMargin(0); 
   scrollWidget->setLayout(vBox); 
   QPalette pal = this->palette(); 
   pal.setColor(QPalette::Base, QColor(191,189,220)); 
   this->setPalette(pal); 
   this->setWidget(scrollWidget);
}
Ich habe aber auch immer wieder Probleme mit ScrollAreas. Zur Erstellungszeit (also im Konstruktor) sind anscheinend die Größen der Widgets noch nicht bekannt, und so bringt die Kalkulation des Layouts meistens nur Mist raus.
Meistens klappt es allerdings, das showEvent() zu überschreiben und hier nochmal das Layout zu kalkulieren.[/code]
M@g!ndo$ch
Beiträge: 70
Registriert: 7. Januar 2007 14:56

Beitrag von M@g!ndo$ch »

Hi,

ich hab auch ein Problem mit ner' ScrollArea. Ich habs schon so ähnlich versucht gehabt wie FinalFantasy es beschrieben hat, bevor ich mich hier nach Hilfe umgeschaut hab.

Bei mir sieht das Ganze so aus:

Code: Alles auswählen

QSizePolicy SizePolicy3(QSizePolicy::Expanding,QSizePolicy::Expanding);
oSizePolicy3.setVerticalStretch(1);
m_oScrollArea = new QScrollArea();
m_oScrollArea->setSizePolicy(oSizePolicy3);
m_oWidget = new QWidget();
m_oWidgetLayout = new QVBoxLayout();
m_oWidget->setLayout(m_oWidgetLayout);
m_oScrollArea->setWidget(m_oLevelFiltersWidget);
oMainLayout->addWidget(m_oScrollArea);
Zur Laufzeit sollen dann dem Widget mehrer QCheckBoxes zugefügt werden können:

Code: Alles auswählen

void ClientTab::addCheckBox(QString &s)
{
	QCheckBox *oCheckBox = new QCheckBox();
	oCheckBox->setText(s);
	oCheckBox->setChecked(true);
	m_oWidgetLayout->addWidget(oCheckBox);
}
Aber wenn ich zur Laufzeit CheckBoxes zugefügt werden sollen, sehe ich die nicht in der ScrollArea!!! Was mache ich falsch?
M@g!ndo$ch
Beiträge: 70
Registriert: 7. Januar 2007 14:56

Beitrag von M@g!ndo$ch »

Ähhhmmmm,

da niemand antwortet geh ich mal davon aus, dass ich alles richtig mache bzw., dass keiner weiß was ich falsch mache ^^

Hiiiiiiiiiiiillllfffeeeeeeeee ......
M@g!ndo$ch
Beiträge: 70
Registriert: 7. Januar 2007 14:56

Beitrag von M@g!ndo$ch »

Ich hab jetzt folgendes festgestellt:

Wenn ich dem Widget eine CheckBox zufüge, bevor ich das Widget der ScrollArea zufüge, sieht man die CheckBox!!!

Code: Alles auswählen

QSizePolicy SizePolicy3(QSizePolicy::Expanding,QSizePolicy::Expanding); 
oSizePolicy3.setVerticalStretch(1); 
m_oScrollArea = new QScrollArea(); 
m_oScrollArea->setSizePolicy(oSizePolicy3);
m_oWidget = new QWidget(); 
m_oWidgetLayout = new QVBoxLayout(); 
m_oWidget->setLayout(m_oWidgetLayout);
CheckBox *box = new CheckBox("Test",m_oWidget);
m_oWidget->addWidget(box);
box->show();
m_oScrollArea->setWidget(m_oWidget); 
oMainLayout->addWidget(m_oScrollArea);
Leider möchte ich die CheckBoxen erst zur Laufzeit zufügen, also nach dem ich "m_oScrollArea->setWidget(m_oWidget); " aufgerufen habe.

Hat niemand eine Idee????
Antworten