2012-03-03 48 views
3

私が試した:QTableWidgetの行と列にテキストを折り返す方法は?

QTableWidget *j = new QTableWidget (10000, 5, centralWidget); 
    j->setColumnWidth (0, 500); 
    j->setColumnWidth (1, 30); 
    j->setColumnWidth (2, 30); 
    j->setColumnWidth (3, 320); 
    j->setColumnWidth (4, 310); 

    j->setWordWrap (true); 

resizeColumnsToContentsresizeRowsToContentsを試みたが、失敗しました。

テキストが設定された幅より長い場合は、文章を分割します。
現在、文の長い部分だけが表示されません。

+0

行の高さを明示的に設定しようとしましたか?それでも問題が解決しない場合は、sizeHint()を変更できるようにQStyledItemDelegateのサブクラスを実装する必要があります。セルの内容を編集できるようにしたいですか? – kossmoboleat

答えて

4

setWordWrapは、列サイズを変更せずにテキストの動作を定義します。列の幅を固定しておく必要がある場合は、の後にresizeRowsToContentsを呼び出して、項目をセルに挿入します(QTableWidgetItemで表にテキストを追加すると仮定します)。

項目に含まれる単語のいずれかが列のサイズより大きい場合、テキストはその時点から省略されます(省略記号は...です)。このような動作を変更するには、アイテムのペイント機能を再実装するか、列を引き伸ばす必要があります。

2

これは、自動的にワードラップを調整する列のサイズが変更するたびに:

connect(
    tableWidget->horizontalHeader(), 
    SIGNAL(sectionResized(int, int, int)), 
    tableWidget, 
    SLOT(resizeRowsToContents())); 
0

を質問コメントで述べたように、いくつかの値に明示的に行サイズを設定することが動作するようです:

tableWidget->resizeRowsToContents(); 
tableWidget->verticalHeader()->setDefaultSectionSize(50); 

私のコードでは、セルの内容をラップさせるために、明示的にsetWordWrapを呼び出す必要はありませんでした。

+0

ドキュメントでは、デフォルトでは 'wordWrap'は' true'です。はい、あなたはそれを呼び出す必要はありません。しかし、私は何もラッピングが表示されません。列の幅が小さすぎる場合は、省略することもできますが、必要に応じて、セルの高さが高くなり、テキストが任意の数の行に表示されるように折り返したいと思います...可能ですか? –

関連する問題