Seite 1 von 1

[gelöst] Anfängerproblem mit QScrollArea (Qt 4.2.3/Windows)

Verfasst: 10. Oktober 2007 10:36
von xdecrepitx
Hallo Forum

Irgendwie stehe ich auf dem Schlauch, denn ich möchte eigentlich etwas ganz simples machen und kriegs einfach nicht hin.

Ich habe eine MainWindow-App, diese enthält einen Splitter, im unteren Teil des Splitters gibt es ein QTabWidget und in die Tab-Pages sollen grössere Formulare reinkommen. Da die Formulare aufgrund ihrer Grösse nie und nimmer komplett angezeigt werden können, soll am rechten Rand der Tag-Pages ein Scrollbar angezeigt werden. Im Screenshot habe ich den ersehnten Scrollbar als roten Strich gezeichnet. Eigentlich ist es nichts anderes als das was in der QTableView im oberen Teil automatisch passiert.

Ich versuche nun, dieses Ziel unter Verwendung einer QScrollArea zu erreichen - bisher leider erfolglos.

Wenn ich das Ganze recht verstehe, hat die QScrollArea ein Parent und ist selber dem Widget, welches gescrollt werden soll, ein Parent. In meinem Fall also QTabWidget (mainTab) -> QScrollArea (scrollArea) -> QWidget (customerEditArea).

Untenstehend mein Versuch, dies zu codieren. Leider führt es nicht zum gewünschten Ergebnis, sondern sieht so aus: Screenshot.

Weiss jemand Rat?

Code: Alles auswählen

mainTab 		= new QTabWidget(this);
customerEditArea    = new QWidget(); // erste Tab-Page
feedbackEditArea    = new QWidget(); // zweite Tab-Page
	
QVBoxLayout *customerLayout 	= new QVBoxLayout();

// damit ein bisschen was in der Tab-Page steht ein paar QLineEdits...
QLineEdit	*customerTextEdit1	= new QLineEdit();
QLineEdit	*customerTextEdit2	= new QLineEdit();
QLineEdit	*customerTextEdit3	= new QLineEdit();
QLineEdit	*customerTextEdit4	= new QLineEdit();
	
customerLayout->addWidget(customerTextEdit1);
customerLayout->addWidget(customerTextEdit2);
customerLayout->addWidget(customerTextEdit3);
customerLayout->addWidget(customerTextEdit4);

customerEditArea->setMinimumSize(QSize(100, 100));
customerEditArea->setMaximumSize(QSize(16777215, 16777215));
customerEditArea->setLayout(customerLayout);
	
QScrollArea *scrollArea = new QScrollArea(mainTab);
scrollArea->setBackgroundRole(QPalette::Dark);
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
scrollArea->setMinimumSize(QSize(100, 100));
scrollArea->setMaximumSize(QSize(16777215, 16777215));
scrollArea->setWidget(customerEditArea);

mainTab->addTab(customerEditArea,tr("Customer"));
mainTab->addTab(feedbackEditArea,tr("Feedback Form"));

Verfasst: 10. Oktober 2007 10:54
von q-tee
ich kann im moment nur raten, aber ich würde anstatt der vorletzten zeile das hier vorschlagen:

Code: Alles auswählen

mainTab->addTab(scrollArea,tr("Customer")); 

Verfasst: 10. Oktober 2007 11:39
von xdecrepitx
q-tee hat geschrieben:ich kann im moment nur raten, aber ich würde anstatt der vorletzten zeile das hier vorschlagen:

Code: Alles auswählen

mainTab->addTab(scrollArea,tr("Customer")); 
Du bis sooo gut! Funktioniert einwandfrei!

Besten Dank! :)