2013-04-05 25 views
14

Tôi biết bạn có thể thiết lập sự liên kết cho từng hạng mục sử dụng:Đặt căn chỉnh mặc định cho các tế bào trong QTableWidget

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

Tuy nhiên tôi muốn thiết lập một liên kết mặc định cho tất cả các tế bào để không cần phải thiết lập mỗi lần tôi tạo một mục mới. Có thể không?

Trả lời

14

Có thể thực hiện được. Nhưng bạn cần phải hiểu rằng bạn không sửa đổi thuộc tính của tiện ích bảng, mà là thuộc tính của mục tiện ích bảng. Đầu tiên tạo mục riêng của bạn, và thiết lập nó như bạn muốn

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

Sau đó, mỗi khi bạn muốn tạo một mục mới thay vì sử dụng constructor bạn sử dụng

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

Một lựa chọn khác để sao chép (chưa được kiểm tra) là to set a prototype trên tablewidget của bạn

QTableWidget::setItemPrototype (const QTableWidgetItem * item) 

Điều cuối cùng này có thể phù hợp hơn nếu bạn đang sử dụng Ui hoặc nếu mục đó có thể chỉnh sửa.

8

Tôi không nghĩ rằng có một phương pháp hiện có cho điều này, nhưng đây là hai cách tiếp cận phù hợp:


1.) Subclass QTableWidgetItem

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

Tuy nhiên, đây có lẽ là một chút overkill cho chỉ một thiết lập duy nhất + bạn có thể muốn quá tải tất cả bốn nhà thầu của QTableWidgetItem.


2.) Một cách khác là using a factory instead of calling new:
Lưu ý: Các cuộc đàm phán bài viết liên quan về kiểm tra đơn vị, nhưng có rất nhiều lợi thế hơn bằng cách làm điều đó.

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

Sau đó, thay vì

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

bạn có thể làm

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

nơi myFactory là một đối tượng của MyTableWidgetFactory.

Các vấn đề liên quan