1

tableWidgetself.ui.tableWidget.resizeRowToContentsにすべての行に使用したテキストを入力します。その後self.ui.tableWidget.setSortingEnabled(1)、並べ替えは期待どおりに機能しますが、行はコンテンツに合わせてサイズ変更されなくなり、実際には以前の高さを保持します。

name                              name v                 name v
---------                         ---------              ---------
text2                             text1line1             text1line1
---------  after sort is clicked: ---------   expected:  text1line2
text1line1                                               text1line3
text1line2                        text2                  ---------
text1line3                                               text2
---------                         ---------              ---------

私の考えは、ヘッダーの並べ替えがクリックされたときにシグナルをキャッチし、self.ui.tableWidget.resizeRowToContents すべての行をもう一度処理することです。 その信号をキャッチする方法は?

4

2 に答える 2

5

resizeRowToContents追加されるすべての行を呼び出す必要はありません。

代わりに、テーブルがいっぱいになったら、resizeRowsToContentsスロットを呼び出します。これにより、すべての行が一度にサイズ変更されます。

次に、同じスロットをsortIndicatorChanged信号に接続して、列がソートされるたびに行のサイズが変更されるようにします。

# ... fill table, then:
self.ui.tableWidget.setSortingEnabled(True)
self.ui.tableWidget.resizeRowsToContents()
self.ui.tableWidget.horizontalHeader().sortIndicatorChanged.connect(
    self.ui.tableWidget.resizeRowsToContents)
于 2012-09-05T18:42:05.040 に答える
1

ヘッダー オブジェクトには、接続できるシグナルがあります: http://doc.qt.nokia.com/4.7-snapshot/qheaderview.html

header = self.ui.tableWidget.horizontalHeader()
header.sortIndicatorChanged.connect(self.fixRowSizes)

データを入力するときに、行のサイズ変更モードを設定することもできます。

# grab the header object
row_header = self.ui.tableWidget.verticalHeader()

# populate some data
self.ui.tableWidget.setRowCount(100)
self.ui.tableWidget.setColumnCount(100)
for row in range(100):
    for col in range(100):
        self.ui.tableWidget.setItem(row, col, QTableWidgetItem(str(row * col)))

    # mark each row to automatically resize to contents
    row_header.setResizeMode(row, QHeaderView.ResizeToContens)

このアプローチの欠点は、ResizeToContents に設定すると、サイズに対するユーザー コントロールが無効になることです。ユーザーが手動でサイズを変更するつもりがない/必要がない限り、これは良い方法です。

于 2012-09-05T17:23:29.153 に答える