Seite 1 von 1

QTableWidget breite der Spalten ( automatisch ) einstellen

Verfasst: 25. Januar 2008 02:47
von tsluga
Mal ein ganz kleines Beispiel

Code: Alles auswählen

#include <QtGui/QTableWidget>
#include <QtGui/QWidget>
#include <QtGui/QMainWindow>
#include <QtGui/QApplication>
#include <QtGui/QTableWidgetItem>


class Ui_Form
{
	public:
		QTableWidget *tableWidget;

		void setupUi(QWidget *Form)
		{
			if (Form->objectName().isEmpty())
				Form->setObjectName(QString::fromUtf8("Form"));
			Form->resize(500, 500);
			tableWidget = new QTableWidget(Form);
			tableWidget->setObjectName(QString::fromUtf8("tableWidget"));
			tableWidget->setGeometry(QRect(0, 0, 500, 500));
			
			tableWidget->setRowCount(4);
			tableWidget->setColumnCount ( 2 );
			retranslateUi(Form);
			tableWidget->setItem(0,0,new QTableWidgetItem(QString("Peter Mustermann")));
			tableWidget->setItem(0,1,new QTableWidgetItem(QString("15")));
			tableWidget->setItem(1,0,new QTableWidgetItem(QString("Peter Franz")));
			tableWidget->setItem(1,1,new QTableWidgetItem(QString("20")));
			QMetaObject::connectSlotsByName(Form);
		} // setupUi

		void retranslateUi(QWidget *Form)
		{
			Form->setWindowTitle(QApplication::translate("Form", "Form", 0, QApplication::UnicodeUTF8));
			if (tableWidget->columnCount() < 2)
				tableWidget->setColumnCount(2);

			QTableWidgetItem *__colItem = new QTableWidgetItem();
			__colItem->setText(QApplication::translate("Form", "Name", 0, QApplication::UnicodeUTF8));
			tableWidget->setHorizontalHeaderItem(0, __colItem);

			QTableWidgetItem *__colItem1 = new QTableWidgetItem();
			__colItem1->setText(QApplication::translate("Form", "Alter", 0, QApplication::UnicodeUTF8));
			tableWidget->setHorizontalHeaderItem(1, __colItem1);
			
			
			Q_UNUSED(Form);
		} // retranslateUi

};

namespace Ui {
	class Form: public Ui_Form {};
} // namespace Ui


class Window : public QMainWindow
{
	public:
		Window()
		{
			Ui_Form ui;
			ui.setupUi(this);
		}
	protected:
		QTableWidget table;
		QTableWidgetItem name,alter;
};

int main(int argc, char **argv)
{
	QApplication app(argc,argv);
	Window *wnd = new Window();
	wnd->show();
	return app.exec();
}
Wie bekomme ich es hin, dass z.B. die erste Spalte eine feste Größe bekomme und die andere ( in diesem Fall 2 ) Spalte sich automatisch vergrößert, abhängig davon wie viel Platz über ist ?

Ich komm nicht weiter :evil:

Verfasst: 25. Januar 2008 08:59
von ObeliX
TableView/TableWidget->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
TableView/TableWidget->horizontalHeader()->setResizeMode(2,QHeaderView::Stretch);

MfG Obel

Verfasst: 27. Januar 2008 12:27
von data
ich poste gleich mal hier, da ich deswegen nicht unbedingt einen zweiten thread aufmachen möchte.

kann es sein das die methode setResizeMode(2,QHeaderView::Stretch); nicht mehr ordnungsgemäß funktioniert?

hab qt in der version 4.3.3 (os: fedora 8 64bit)

ich hänge mal ein pic von dem problem an. dabei sollte im roten kreis Einzelpreis und Gesamtpreis auftauchen, jedoch schein die spalte Einzelpreis wie Beschreibung recht lang. mein code dazu sieht so aus:

Code: Alles auswählen

// Tabellenfeld
	tableWidget->setColumnWidth(0, 70); // Menge
	tableWidget->setColumnWidth(1, 100); // Einheit
	tableWidget->horizontalHeader()->setResizeMode(2, QHeaderView::Stretch); // Beschreibung
	tableWidget->setColumnWidth(3, 100); // Einzelpreis
	tableWidget->setColumnWidth(4, 100); // Gesamtpreis
auch bei winxp passiert das selbe (qt 4.3.3 und mingw). *ratloskuck*
aso, QHeaderView::ResizeToContents funktioniert bestens.

Verfasst: 27. Januar 2008 16:57
von comer352l
Könnte evtl. ein Qt-Bug sein. Bug 191566 scheint deinem Problem zumindest sehr ähnlich zu sein...
Ich weiß aus eigener Erfahrung, das z.B. auch die Scroll-Funktionen von QTableWidget noch ein wenig Buggy sind(z.B. Bug 174449). Hab mir damals n'en Wolf gesucht...

Verfasst: 27. Januar 2008 23:38
von tsluga
Tatsächlich ein Bug, mit 4.3.2 geht es wunderbar. THX

Verfasst: 28. Januar 2008 08:36
von data
vielen dank für eure antworten. muss wohl vorerst ein downgrade auf 4.3.2 machen. :(
mal sehen ob's dann in der 4.3.4 behoben ist.

Verfasst: 28. Januar 2008 11:18
von ObeliX
hast du mal statt
tableWidget->setColumnWidth(0, 70);
das versucht
tableWidget->horizontalHeader()->resizeSection(0,70); ?

würde mich wirklich interessieren, ob das den bug ggf. umgeht. erspart dir vielleicht das downgraden.

gruß Obel

Verfasst: 28. Januar 2008 18:34
von data
@ObeliX: genau der gleich effekt wie oben.

geänderter codeteil

Code: Alles auswählen

	// Tabellenfeld
	tableWidget->horizontalHeader()->resizeSection(0,70); // Menge
	tableWidget->horizontalHeader()->resizeSection(1,100); // Einheit
	tableWidget->horizontalHeader()->setResizeMode(2, QHeaderView::Stretch); // Beschreibung
	tableWidget->horizontalHeader()->resizeSection(3,100); // Einzelpreis
	tableWidget->horizontalHeader()->resizeSection(4,100); // Gesamtpreis

Verfasst: 28. Januar 2008 19:01
von data
wollte nur noch mal eine bestätigung des bugs einreichen.

mit dem gleichen codeabschitt wie ganz oben und mit qt in der version 4.3.2 funktioniert nun alles bestens.

Verfasst: 26. Februar 2008 18:58
von data
rückmeldung: da nun die version 4.3.4 draußen ist, wollt ich nur mal bescheid geben das das beschriebene problem behoben ist. :)

Verfasst: 28. Februar 2008 23:22
von ObeliX
@data :
sehr aufmerksam :D .. thanx

Obel