Seite 1 von 1

Frage zu Layout

Verfasst: 5. August 2005 13:58
von Flachkoepper
Mahlzeit,

ich habe folgenden Programmteil:

in main.cpp:

Code: Alles auswählen

scrollArea = new QScrollArea;
plotArea = new PlotArea(scrollArea->viewport());
scrollArea->setWidget( plotArea );
scrollArea->setWidgetResizable( true );
Und die Implementierung der PlotArea:

Code: Alles auswählen

PlotArea::PlotArea( QWidget* parent) : QWidget( parent )
{
	layout = new QVBoxLayout(this);
}

void PlotArea::slotDisplay( QList<double*> dataList )
{
	for (int i = 1; i <= dataList.count(); i++) {
		plot = new QwtPlot;
		layout->addWidget( plot );
		plot->replot();
	}
}
Aus meinem Programm wird jetzt die Funktion slotDisplay() aufgerufen. Problem hierbei ist, dass bei zunehmender Größe der QList (in meinem Fall bei so ca. 30-40 ) der Aufbau des Layouts sehr lange ( mehrere Sekunden) dauert. Dies ist allerdings nicht der Fall, wenn ich die Funktion slotDisplay() im Konstruktor von PlotArea aufrufe.

Hat irgendwer ne Ahnung, wie ich das vielleicht beschleunigen kann?

Viele Grüße,
Flachkoepper.

Verfasst: 5. August 2005 17:55
von Christian81
Wann wird SlotDisplay aufgerufen? Warum erstellst du da immer neue Widgets? Wann löscht du die wieder?

Verfasst: 8. August 2005 09:01
von Flachkoepper
Guten Morgen,

1. slotDisplay wird aufgerufen bei folgendem Teil:

Code: Alles auswählen

connect(this, SIGNAL(dataLoaded(QList<double*>)), plotArea, SLOT(slotDisplay(QList<double*>)));
QStringList filenameList = QFileDialog::getOpenFileNames(...);
QList<double*> dataList = doSomething(filenameList); //Hier wird die Liste gefüllt
emti dataLoaded(dataList);
Dann soll 2. für jedes File aus filenameList ein eigenes PlotWidget erstellt werden und die Daten darin angezeigt werden. Das Löschen der Plotwidgets geschieht bei Ende des Programms (die brauche ich ja schließlich die ganze Zeit über.). Irgendwo ein Denkfehler dabei?

Viele Grüße,
Flachkoepper

Verfasst: 8. August 2005 09:17
von Christian81
slotDisplay hörte sich so an als würde es mehr als einmal aufgerufen, deshalb meine Frage. Ich denke es liegt evtl. daran, dass in jedem addWidget() das Layout neu berechnet werden muss (da das Layout schon angezeigt wird, was im Konstruktor noch nicht der Fall ist).
Ich würde mit QWidget::hide() bzw. show() experimentieren um den ständigen Neuaufbau zu vermeiden.

Verfasst: 8. August 2005 09:33
von Flachkoepper
Jau, wenn ich vor das emit dataLoaded() ein plotArea->hide() und danach sofort wieder ein plotArea->show() einfüge, dann geht der Bildschirmaufbau in Nullkommanix.

Danke!

Flachkoepper