Seite 1 von 1

einfaches Problem (Anfänger)

Verfasst: 10. März 2011 07:28
von prinzenrolle
Hallo,
ich habe ein kleines Programm und möchte das die QVBoxLayout
sich an die Tabelle anpasst. Scheinbar verstehe ich aber etwas grundlegendes nicht.

Code: Alles auswählen

indDialog::FindDialog(QWidget *parent)
			: QDialog(parent)
{
	vLayout = new QVBoxLayout;
	
	model = new QStandardItemModel(0,2);
	table = new QTableView();

	setWindowTitle(tr("Test"));	

	table->setModel(model);
	table->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
	
	vLayout->addWidget(table);

	setLayout(vLayout);
}
Bild

Vielen dank für die Antworten

Verfasst: 10. März 2011 07:54
von Christian81
Was genau soll funktionieren? Das VBoxLayout funktioniert doch prima - das Tabellenwidget füllt den Parent komplett aus... was möchtest Du genau erreichen?

Verfasst: 10. März 2011 08:03
von upsala
Wenn nur ein Widget in einem Layout ist, wird dieses immer den max. verfügbaren Platz einnehmen.

Und ein QTableView berechnet seinen Platzbedarf unabhängig vom Inhalt.

Verfasst: 10. März 2011 08:51
von prinzenrolle
Hallo,
wow so schnell so viele Antworten.

Vielen dank!

Ich dachte an so etwas, allerdings habe ich es nachträglich kleiner gezogen.
Bild

Verfasst: 10. März 2011 11:17
von prinzenrolle
upsala hat geschrieben:Wenn nur ein Widget in einem Layout ist, wird dieses immer den max. verfügbaren Platz einnehmen.

Und ein QTableView berechnet seinen Platzbedarf unabhängig vom Inhalt.
Hallo,
danke für die Antwort also muss das vLayout = new QVBoxLayout angepasst werden?

Danke

Verfasst: 10. März 2011 12:44
von upsala
Einfach gesagt: Die Breite des QTableView (setFixedWitdth()) ist die Breite des vertikalen Headers + die Summe der Breiten der Sectionen des Horizontalen Headers.

Verfasst: 11. März 2011 17:50
von prinzenrolle
hallo,

vielen dank für die erneute antwort!
ich bin echt ein noob.
nun habe ich beim erstellen der tabelle folgendes Problem:

Sofern keine vertikale Scrollbar vorhanden ist,
funktioniert es auch super.
Werden die Zeilen > wirt automatisch eine vertikale
Scrollbar hinzugefügt, ist ja auch noch okay.
Allerdings wird die Größe nicht mehr angepasst und die Scrollbar
überlappt Spalte2. siehe Bilder unten

Ich verstehe auch warum

Code: Alles auswählen

if( (table->verticalScrollBar()->isVisible()) )
false zurück gibt da sie in dem Moment noch nicht vorhanden ist.
nur wie macht man es besser/richtig.

Code: Alles auswählen

void FindDialog::setValues(QByteArray serialText, QByteArray versionText)
{
	QStandardItem *item1,*item2; 
	QList<QStandardItem*> itemList;
	
	std::cout << "serialText.data(): " << serialText.data() << std::endl;
	std::cout << "versionText.data(): " << versionText.data() << std::endl;	
	
	item1 = new QStandardItem(QString(serialText.data()));
	item1->setForeground(Qt::black);
	item1->setFlags(Qt::ItemIsSelectable);
	item2 = new QStandardItem(QString(versionText.data()));
	item2->setForeground(Qt::black);
	item2->setFlags(Qt::ItemIsSelectable);
	itemList.append(item1);
	itemList.append(item2);
	model->appendRow(itemList);
	table->resizeColumnsToContents();
	table->resizeRowsToContents();
	twidth = table->columnWidth(0) + table->columnWidth(1) + table->verticalHeader()->width();
	if( (table->verticalScrollBar()->isVisible()) )
		twidth = twidth + 20;//table->verticalScrollBar()->width();
	table->setFixedWidth( twidth );
}
Vielen dank erneut!

Bild
Bild