web-dev-qa-db-ja.com

QTableWidgetでセルのデフォルトの配置を設定する

私はあなたが各項目の配置を設定できることを知っています:

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

ただし、新しい項目を作成するたびに設定する必要がないように、すべてのセルにデフォルトの配置を設定したいと思います。出来ますか?

19
jsalvador

はい、可能です。ただし、テーブルウィジェットのプロパティではなく、テーブルウィジェットアイテムのプロパティを変更していることを理解する必要があります。最初に独自のアイテムを作成し、必要に応じて設定します

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

次に、使用するコンストラクタを使用するのではなく、新しいアイテムを作成するたびに

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

クローンする(テストされていない)もう1つの方法は、テーブルウィジェットで プロトタイプを設定する です。

QTableWidget::setItemPrototype ( const QTableWidgetItem * item )

Uiを使用している場合、またはアイテムが編集可能な場合は、この最後の方が適切です。

21
UmNyobe

これには既存の方法はないと思いますが、ここでは2つの方法で機能します。


1.)サブクラスQTableWidgetItem

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

ただし、これはおそらく1つの設定だけでは少しやりすぎです。+ QTableWidgetItem の4つのコンストラクタすべてをオーバーロードしたい場合があります。


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" );

ここで、myFactoryMyTableWidgetFactoryのオブジェクトです。

8
Tim Meyer