Je sais que vous pouvez définir l'alignement de chaque élément en utilisant:
TableWidget->item(0,0)->setTextAlignment(Qt::AlignLeft);
Cependant, je voudrais définir un alignement par défaut pour toutes les cellules afin de ne pas avoir à le définir à chaque fois que je crée un nouvel élément. C'est possible?
Oui c'est possible. Mais vous devez comprendre que vous ne modifiez pas une propriété du widget de table, mais une propriété de l'élément de widget de table. Créez d'abord votre propre article et configurez-le comme vous le souhaitez
QTableWidgetItem * protoitem = new QTableWidgetItem();
protoitem->setTextAlignment(Qt::AlignLeft);
etc...
Ensuite, chaque fois que vous souhaitez créer un nouvel élément plutôt que d'utiliser le constructeur que vous utilisez
QTableWidgetItem * newitem = protoitem->clone();
tableWidget->setItem(0,0, newitem);
Une autre alternative au clone (non testé) est pour définir un prototype sur votre tablewidget
QTableWidget::setItemPrototype ( const QTableWidgetItem * item )
Ce dernier peut être plus approprié si vous utilisez une interface utilisateur ou si l'élément est modifiable.
Je ne pense pas qu'il existe une méthode existante pour cela, mais voici deux approches qui fonctionnent:
1.) Sous-classe QTableWidgetItem
MyTableWidgetItem::MyTableWidgetItem() :
QTableWidgetItem()
{
setTextAlignment( Qt::AlignLeft );
}
Cependant, c'est probablement un peu exagéré pour un seul paramètre + vous voudrez peut-être surcharger les quatre constructeurs de QTableWidgetItem .
2.) Une autre approche est en utilisant une usine au lieu d'appeler new :
Remarque: L'article lié parle de tests unitaires, mais il y a beaucoup plus d'avantages à le faire.
QTableWidgetItem* MyTableWidgetFactory::createTableWidgetItem( const QString& text ) const
{
QTableWidgetItem* item = new QTableWidgetItem( text );
item->setTextAlignment( Qt::AlignLeft );
return item;
}
Au lieu de
QTableWidgetItem* myItem = new QTableWidgetItem( "foo" );
item->setTextAlignment( Qt::AlignLeft );
tu peux faire
QTableWidgetItem* myItem = myFactory->createTableWidgetItem( "foo" );
où myFactory
est un objet de MyTableWidgetFactory
.