2011-09-19 27 views
0

我在這裏工作,目前我困在以下問題上。 它是關於一個QTableView有一個名爲「Description」的列,該列的單元格包含一個QPlainTextEditDelegate。每次輸入時,我都無法設置QPlainTextEdit的高度。現在,它的行爲就像一個QLineEdit,直到我拖動QTableView的那一行(當時我處於活動狀態)較大。在QTableView中設置QPlainTextEdit委託的高度

我想要做的是改變QPlainTextEdit的高度,一旦我進入它。 你有什麼建議?我如何着手完成這件事?

謝謝大家提前!

順便說一句對不起,我的英文不好:/

編輯:

好,我解決了這個問題,但沒有sizeHint,我用updateEditorGeometry:

void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem & option, const QModelIndex & index) const;

而且這種方法裏面,你可以設置你想要的寬度或高度

editor->setGeometry(option.rect.x(),option.rect.y(),<your_width>,<your_height>);

但是,無論如何,謝謝你!

回答

1

您應該在創建編輯器時重新實現QAbstractItemDelegate :: sizeHint方法以返回期望的高度。我不認爲在創建編輯器之後發出QAbstractItemDelegate :: sizeHintChanged信號是必須的,但文檔沒有說什麼。如果沒有它,它就不能工作,你應該在返回創建的編輯器小部件後發出sizeHintChanged來通知需要更改行高的視圖。

+0

感謝您的回答 我在我的Delegate子類中實現了sizeHint方法,但它永遠不會被調用。同時我正在尋找原因,並在Qt-Interest Archive中找到了一條消息。該人聲稱,他的工作後,他補充說: 'tableView.verticalHeader() - > resizeSections(QHeaderView :: Custom); tableView.horizo​​ntalHeader() - > resizeSections(QHeaderView :: Custom);' 但這並沒有解決問題。然後,我發現另一個建議,說禁用stretchLastSection,但也沒有奏效。你提到要發射sizeHintChanged(),我應該在哪裏放置它? – Stradivari

+0

大小提示被稱爲獨立於編輯器的存在 - 如果您的編輯器比DisplayRole大,您應該發出sizeHintChanged創建您的給定項目的編輯器(所以在createEditor和setEditorData中,如果size是數據相關的),所以qt知道它應該現在預留更多空間。奇怪的是,你的sizeHint沒有被調用 - 確保你有絕對相同的方法聲明 - 有時候缺少const或者某些東西導致方法被視爲不同的方法並且(有意)不被視爲虛擬覆蓋 - 因此它不會被調用。 –