在QTableWidget的单元设置默认对齐(Set default alignment for c

2019-08-19 17:44发布

我知道你可以设置使用每个项目的比对:

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

不过,我想,以设置默认对齐对所有的细胞就不必每次我创建一个新项目时将其设置。 可能吗?

Answer 1:

对的,这是可能的。 但是,你要明白你是不是修改表控件的属性,但该表构件项目的属性。 首先创建自己的项目,然后将其设置为你想要

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

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

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

另一种方法克隆(未经测试)是设置一个原型您tablewidget

QTableWidget::setItemPrototype ( const QTableWidgetItem * item )

如果您使用的是用户界面还是这最后一个可能更适合,如果项目可编辑。



Answer 2:

我不认为有这种现有的方法,但这里的工作两种方法:


1。)子类QTableWidgetItem

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

然而,这可能只是一个单一的设置有点大材小用+你可能要超负荷的所有四个构造函数QTableWidgetItem 。


2)另一种方法是使用一个工厂,而不是调用新的 :
注:单元测试链接的文章会谈,但也有通过做很多更有优势。

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



文章来源: Set default alignment for cells in QTableWidget