Установить выравнивание по умолчанию для ячеек в QTableWidget

Я знаю, что вы можете установить выравнивание для каждого элемента, используя:

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

Однако я хотел бы установить выравнивание по умолчанию для всех ячеек, чтобы не приходилось устанавливать его каждый раз, когда я создаю новый элемент. Является ли это возможным?

15

Решение

Да, это возможно. Но вы должны понимать, что вы изменяете не свойство виджета таблицы, а свойство элемента виджета таблицы. Сначала создайте свой собственный элемент и настройте его так, как вы хотите

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

Затем каждый раз, когда вы хотите создать новый элемент, а не использовать конструктор, который вы используете

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

Еще одна альтернатива клону (непроверенная) установить прототип на вашем столе виджет

QTableWidget::setItemPrototype ( const QTableWidgetItem * item )

Последний вариант может быть более подходящим, если вы используете пользовательский интерфейс или если элемент редактируемый.

17

Другие решения

Я не думаю, что существует способ для этого, но вот два подхода, которые работают:


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,

8

По вопросам рекламы [email protected]