QTableWidget breite der Spalten ( automatisch ) einstellen

Alles rund um die Programmierung mit Qt
Antworten
tsluga
Beiträge: 16
Registriert: 25. Januar 2006 02:15

QTableWidget breite der Spalten ( automatisch ) einstellen

Beitrag 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:
Skype-User : tsluga
ObeliX
Beiträge: 59
Registriert: 14. November 2007 17:47

Beitrag von ObeliX »

TableView/TableWidget->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
TableView/TableWidget->horizontalHeader()->setResizeMode(2,QHeaderView::Stretch);

MfG Obel
data
Beiträge: 23
Registriert: 22. November 2004 22:33

Beitrag 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.
Dateianhänge
Bild vom Problem
Bild vom Problem
bav.png (9.1 KiB) 7453 mal betrachtet
comer352l
Beiträge: 47
Registriert: 10. Juli 2007 18:10

Beitrag 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...
tsluga
Beiträge: 16
Registriert: 25. Januar 2006 02:15

Beitrag von tsluga »

Tatsächlich ein Bug, mit 4.3.2 geht es wunderbar. THX
Skype-User : tsluga
data
Beiträge: 23
Registriert: 22. November 2004 22:33

Beitrag 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.
ObeliX
Beiträge: 59
Registriert: 14. November 2007 17:47

Beitrag 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
data
Beiträge: 23
Registriert: 22. November 2004 22:33

Beitrag 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
data
Beiträge: 23
Registriert: 22. November 2004 22:33

Beitrag 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.
data
Beiträge: 23
Registriert: 22. November 2004 22:33

Beitrag 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. :)
ObeliX
Beiträge: 59
Registriert: 14. November 2007 17:47

Beitrag von ObeliX »

@data :
sehr aufmerksam :D .. thanx

Obel
Antworten