2013-04-05 9 views
14

Ich weiß, dass Sie die Ausrichtung für jedes Element festlegen können unter Verwendung von:Set Standardausrichtung für Zellen in QTableWidget

TableWidget->item(0,0)->setTextAlignment(Qt::AlignLeft); 

Jedoch habe ich eine Standard-Ausrichtung für alle Zellen setzen, um möchte nicht zu tun haben, zu setzen es jedes Mal, wenn ich einen neuen Artikel erstelle. Ist es möglich?

Antwort

14

Ja, es ist möglich. Sie müssen jedoch verstehen, dass Sie keine Eigenschaft des Tabellen-Widgets ändern, sondern eine Eigenschaft des Tabellen-Widget-Elements. Zuerst Ihre eigene Position erstellen, und es einrichten, wie Sie

QTableWidgetItem * protoitem = new QTableWidgetItem(); 
protoitem->setTextAlignment(Qt::AlignLeft); 
etc... 

wollen Dann wird jedes Mal, wenn Sie ein neues Element erstellen, anstatt mit dem Konstruktor Sie verwenden

QTableWidgetItem * newitem = protoitem->clone(); 
tableWidget->setItem(0,0, newitem); 

Eine weitere Alternative zu klonen (ungetestet ist) to set a prototype auf tablewidget

QTableWidget::setItemPrototype (const QTableWidgetItem * item) 

Dieses letzte man besser geeignet sein können, wenn Sie einen Ui oder wenn das Element verwenden, ist editierbar.

8

Ich glaube nicht, gibt es eine bestehende Methode für diese, aber hier sind zwei Ansätze, die funktionieren:


1.) Subclass QTableWidgetItem

MyTableWidgetItem::MyTableWidgetItem() : 
    QTableWidgetItem() 
{ 
    setTextAlignment(Qt::AlignLeft); 
} 

Dies ist jedoch wahrscheinlich ein bisschen Overkill für nur eine einzige Einstellung + möchten Sie vielleicht alle vier Konstruktoren von QTableWidgetItem überladen.


2.) Ein weiterer Ansatz ist using a factory instead of calling new:
Hinweis: Die verlinkten Artikel spricht über Unit-Tests, aber es gibt viele weitere Vorteile, die durch das zu tun.

QTableWidgetItem* MyTableWidgetFactory::createTableWidgetItem(const QString& text) const 
{ 
    QTableWidgetItem* item = new QTableWidgetItem(text); 
    item->setTextAlignment(Qt::AlignLeft); 
    return item; 
} 

Dann statt

QTableWidgetItem* myItem = new QTableWidgetItem("foo"); 
item->setTextAlignment(Qt::AlignLeft); 

können Sie

QTableWidgetItem* myItem = myFactory->createTableWidgetItem("foo"); 

tun, wo myFactory ein Objekt von MyTableWidgetFactory ist.

Verwandte Themen