2013-04-05 15 views
14

Wiem, że można ustawić wyrównanie dla każdej pozycji przy użyciu:Ustaw domyślne ustawienie dla komórek w QTableWidget

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

Jednak chciałbym ustawić domyślne ustawienie dla wszystkich komórek, aby nie trzeba ustawić to za każdym razem, gdy tworzę nowy przedmiot. Czy to możliwe?

Odpowiedz

14

Tak, jest to możliwe. Ale musisz zrozumieć, że nie modyfikujesz właściwości widżetu tabeli, ale właściwość elementu widgetu tabeli. Najpierw utwórz własną pozycję i ustawić go tak, jak chcesz

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

Potem za każdym razem chcesz utworzyć nowy element, a nie za pomocą konstruktora użyć

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

Inną alternatywą do klonowania (niesprawdzone) jest to set a prototype na tablewidget

QTableWidget::setItemPrototype (const QTableWidgetItem * item) 

Ten ostatni może być bardziej odpowiednie, jeśli używasz Ui lub jeśli element jest edytowalny.

8

nie sądzę jest istniejąca metoda do tego, ale tu dwa podejścia, które działają:


1.) Podklasa QTableWidgetItem

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

jednak jest to prawdopodobnie nieco overkill dla pojedynczego ustawienia + możesz przecenić wszystkie cztery konstruktory z QTableWidgetItem.


2.) Innym podejściem jest using a factory instead of calling new:
Uwaga: Połączone artykuł mówi o testów jednostkowych, ale istnieje wiele więcej zalet by to robić.

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

Wtedy zamiast

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

można zrobić

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

gdzie myFactory Przedmiotem MyTableWidgetFactory.

Powiązane problemy