2013-04-05 16 views

risposta

14

Sì, è possibile. Ma devi capire che non stai modificando una proprietà del widget della tabella, ma una proprietà dell'elemento del widget della tabella. In primo luogo creare il proprio oggetto, e configurarlo come volete

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

Poi ogni volta che si desidera creare un nuovo elemento, piuttosto che utilizzando il costruttore si utilizza

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

Un'altra alternativa per clonare (non testata) è to set a prototype sul tablewidget

QTableWidget::setItemPrototype (const QTableWidgetItem * item) 

Quest'ultimo può essere più appropriato se si utilizza un Ui o se l'articolo è modificabile.

8

Non credo che ci sia un metodo esistente per questo, ma qui sono due approcci che funzionano:


1.) Sottoclasse QTableWidgetItem

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

Tuttavia, questo è probabilmente un po ' overkill per una singola impostazione + potresti voler sovraccaricare tutti e quattro i costruttori di QTableWidgetItem.


2.) Un altro approccio è using a factory instead of calling new:
Nota: L'articolo parla di test di unità collegate, ma ci sono molti altri vantaggi di farlo.

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

Allora, invece di

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

si può fare

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

dove myFactory è un oggetto di MyTableWidgetFactory.

Problemi correlati