21

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

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

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

4

2 回答 2

24

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

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

然后每次你想创建一个新项目而不是使用你使用的构造函数

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

克隆(未经测试)的另一种替代方法是在您的表格小部件上设置原型

QTableWidget::setItemPrototype ( const QTableWidgetItem * item )

如果您使用的是 Ui 或者项目是可编辑的,则最后一个可能更合适。

于 2013-04-05T08:09:31.923 回答
10

我认为没有现成的方法可以解决这个问题,但这里有两种可行的方法:


1.) 子类 QTableWidgetItem

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

但是,对于单个设置来说,这可能有点矫枉过正 + 您可能想要重载QTableWidgetItem的所有四个构造函数。


2.) 另一种方法是使用工厂而不是调用 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

于 2013-04-05T08:21:03.073 回答