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或项目是可编辑的,则最后一个更合适.
我认为现有方法并不存在,但这里有两种方法可行:
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.