我知道你可以使用以下方式为每个项目设置对齐方式:
TableWidget->item(0,0)->setTextAlignment(Qt::AlignLeft);
但是我希望为所有单元格设置默认对齐方式,以便每次创建新项目时无需再次设置。这是否可能?
我知道你可以使用以下方式为每个项目设置对齐方式:
TableWidget->item(0,0)->setTextAlignment(Qt::AlignLeft);
但是我希望为所有单元格设置默认对齐方式,以便每次创建新项目时无需再次设置。这是否可能?
是的,这是可能的。但您需要了解的是,您修改的不是表格小部件的属性,而是表格小部件项的属性。首先创建自己的项目,并按照您的要求设置它。
QTableWidgetItem * protoitem = new QTableWidgetItem();
protoitem->setTextAlignment(Qt::AlignLeft);
etc...
然后,每当你想创建一个新的项目时,不要使用构造函数,而是使用
QTableWidgetItem * newitem = protoitem->clone();
tableWidget->setItem(0,0, newitem);
克隆的另一种选择(未经测试)是在您的表格小部件上设置原型
QTableWidget::setItemPrototype ( const QTableWidgetItem * item )
如果您正在使用UI或项目是可编辑的,则这最后一种方法可能更合适。
我不认为有一个现成的方法可以解决这个问题,但以下两种方法可以实现:
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
对象。
QStyledItemDelegate
;它有一个方法initStyleOption
,可用于为使用您的委托的所有单元格设置样式选项。void MyItemDelegate::initStyleOption(QStyleOptionViewItem *option,
const QModelIndex &index) const override {
// call base class implementation to set things up as default
QStyledItemDelegate::initStyleOption(option, index);
// override just the style options you want later
option->displayAlignment = Qt::AlignCenter;
}
它更加优雅,不像使用 QTableWidgetItem
那样繁琐。