einfaches Problem (Anfänger)

Alles rund um die Programmierung mit Qt
Antworten
prinzenrolle
Beiträge: 25
Registriert: 4. August 2010 18:38

einfaches Problem (Anfänger)

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
prinzenrolle
Beiträge: 25
Registriert: 4. August 2010 18:38

Beitrag 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
prinzenrolle
Beiträge: 25
Registriert: 4. August 2010 18:38

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Einfach gesagt: Die Breite des QTableView (setFixedWitdth()) ist die Breite des vertikalen Headers + die Summe der Breiten der Sectionen des Horizontalen Headers.
prinzenrolle
Beiträge: 25
Registriert: 4. August 2010 18:38

Beitrag 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
Antworten