Seite 1 von 1
QScrollArea Problem
Verfasst: 8. August 2006 17:18
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
Verfasst: 9. August 2006 15:26
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]
Verfasst: 26. Februar 2007 23:14
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?
Verfasst: 28. Februar 2007 13:36
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 ......
Verfasst: 3. März 2007 17:07
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????