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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Другой альтернативой клонированию (untested) является чтобы установить прототип на вашем табличном виджете

QTableWidget::setItemPrototype ( const QTableWidgetItem * item )

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

Ответ 2

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


1.) Подкласс QTableWidgetItem

MyTableWidgetItem::MyTableWidgetItem() :
    QTableWidgetItem()
{
    setTextAlignment( Qt::AlignLeft );
}

Однако это, вероятно, немного перехитрит только для одного параметра +, вы можете перегрузить все четыре конструктора QTableWidgetItem.


2.) Другой подход с помощью factory вместо вызова нового:
Примечание. Связанная статья рассказывает об модульном тестировании, но есть еще много преимуществ.

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.