在QTableWidget中设置单元格的默认对齐方式

时间:2013-04-05 07:09:22

标签: c++ qt qtablewidget text-alignment

我知道您可以使用以下方式设置每个项目的对齐方式:

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

但是我想为所有单元格设置默认对齐方式,以便每次创建新项目时都不必设置它。有可能吗?

2 个答案:

答案 0 :(得分:20)

是的,这是可能的。但是您需要了解您不是在修改表小部件的属性,而是修改表小部件项的属性。首先创建自己的项目,然后根据需要进行设置

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

然后,每次要创建新项而不是使用构造函数时,请使用

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

克隆(未经测试)的另一种替代方法是在tablewidget

to set a prototype
QTableWidget::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" );

其中myFactoryMyTableWidgetFactory的对象。