Установить выравнивание по умолчанию для ячеек в QTableWidget
Я знаю, что вы можете установить выравнивание для каждого элемента, используя:
TableWidget->item(0,0)->setTextAlignment(Qt::AlignLeft);
однако я хотел бы установить выравнивание по умолчанию для всех ячеек, чтобы не нужно было устанавливать его каждый раз, когда я создаю новый элемент. Возможно ли это?
2 ответов
Да, это возможно. Но вы должны понимать, что вы не изменяете свойство виджета таблицы, а свойство элемента виджета таблицы. Сначала создайте свой собственный элемент и настройте его так, как вы хотите
QTableWidgetItem * protoitem = new QTableWidgetItem();
protoitem->setTextAlignment(Qt::AlignLeft);
etc...
затем каждый раз, когда вы хотите создать новый элемент, а не с помощью конструктора вы используете
QTableWidgetItem * newitem = protoitem->clone();
tableWidget->setItem(0,0, newitem);
Другой альтернативой клонированию (непроверенному) является установить прототип на tablewidget
QTableWidget::setItemPrototype ( const QTableWidgetItem * item )
этот последний может быть больше подходит, если вы используете пользовательский интерфейс или если элемент доступен для редактирования.
Я не думаю, что существует метод для этого, но два подхода вот это:
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
.