我知道您可以使用以下方式设置每个项目的对齐方式:
TableWidget->item(0,0)->setTextAlignment(Qt::AlignLeft);
但是我想为所有单元格设置默认对齐方式,以便每次创建新项目时都不必设置它。有可能吗?
答案 0 :(得分:20)
是的,这是可能的。但是您需要了解您不是在修改表小部件的属性,而是修改表小部件项的属性。首先创建自己的项目,然后根据需要进行设置
QTableWidgetItem * protoitem = new QTableWidgetItem();
protoitem->setTextAlignment(Qt::AlignLeft);
etc...
然后,每次要创建新项而不是使用构造函数时,请使用
QTableWidgetItem * newitem = protoitem->clone();
tableWidget->setItem(0,0, newitem);
克隆(未经测试)的另一种替代方法是在tablewidget
上to set a prototypeQTableWidget::setItemPrototype ( const QTableWidgetItem * item )
如果您使用的是Ui,或者该项目是可编辑的,则最后一个更合适。
答案 1 :(得分:8)
我认为现有方法并不存在,但这里有两种方法可行:
1。)子类QTableWidgetItem
MyTableWidgetItem::MyTableWidgetItem() :
QTableWidgetItem()
{
setTextAlignment( Qt::AlignLeft );
}
但是,对于一个设置来说,这可能有点过分了+你可能想要重载QTableWidgetItem的所有四个构造函数。
2.)另一种方法是using a factory instead of calling new:
注意:链接的文章讨论了单元测试,但这样做还有很多优点。
QTableWidgetItem* MyTableWidgetFactory::createTableWidgetItem( const QString& text ) const
{
QTableWidgetItem* item = new QTableWidgetItem( text );
item->setTextAlignment( Qt::AlignLeft );
return item;
}
然后代替
QTableWidgetItem* myItem = new QTableWidgetItem( "foo" );
item->setTextAlignment( Qt::AlignLeft );
你可以做到
QTableWidgetItem* myItem = myFactory->createTableWidgetItem( "foo" );
其中myFactory
是MyTableWidgetFactory
的对象。