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

jsa*_*dor 19 c++ qt text-alignment qtablewidget

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

TableWidget->item(0,0)->setTextAlignment(Qt::AlignLeft);
Run Code Online (Sandbox Code Playgroud)

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

UmN*_*obe 23

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

 QTableWidgetItem * protoitem = new QTableWidgetItem();
 protoitem->setTextAlignment(Qt::AlignLeft);
 etc...
Run Code Online (Sandbox Code Playgroud)

然后每次要创建新项而不是使用您使用的构造函数

 QTableWidgetItem * newitem = protoitem->clone();
 tableWidget->setItem(0,0, newitem);
Run Code Online (Sandbox Code Playgroud)

克隆(未经测试)的另一种替代方法是在tablewidget上设置原型

QTableWidget::setItemPrototype ( const QTableWidgetItem * item )
Run Code Online (Sandbox Code Playgroud)

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


Tim*_*yer 9

我认为现有方法并不存在,但这里有两种方法可行:


1.)子类QTableWidgetItem

MyTableWidgetItem::MyTableWidgetItem() :
    QTableWidgetItem()
{
    setTextAlignment( Qt::AlignLeft );
}
Run Code Online (Sandbox Code Playgroud)

但是,对于单个设置来说,这可能有点过分了+你可能想要重载QTableWidgetItem的所有四个构造函数.


2.)另一种方法是使用工厂而不是调用new:
注意:链接的文章讨论了单元测试,但这样做还有很多优点.

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

然后而不是

QTableWidgetItem* myItem = new QTableWidgetItem( "foo" );
item->setTextAlignment( Qt::AlignLeft );
Run Code Online (Sandbox Code Playgroud)

你可以做

QTableWidgetItem* myItem = myFactory->createTableWidgetItem( "foo" );
Run Code Online (Sandbox Code Playgroud)

在哪里myFactory是一个对象MyTableWidgetFactory.