簡體   English   中英

Qt:如何創建一個可滾動的,所有者繪制的窗口小部件

[英]Qt: How to create a scrollable, owner-drawn widget

我需要創建一個可滾動的,所有者繪制的小部件,其行為類似於QPlainTextEdit並帶有文字QPlainTextEdit文本,從某種意義上說,高度取決於寬度-隨着內容寬度的減小,內容高度也會增加。

最好的方法是什么? 我當時正在考慮將QWidget-derived類放在QScrollArea ,但是QPlainTextEdit是從QScrollArea派生的,我應該走那條路線嗎?

另外,我只想在paintEvent()繪制可見區域,否則會很浪費。

現在,我正在檢查QPlainTextEdit的代碼,但它相當復雜且不易閱讀,因此,如果有人知道在網絡上更簡單的代碼示例,則可以給我一個鏈接,這將大有幫助。

我將發布我想出的解決方案。 它不是最好的,但大多數情況下都有效。

最后,我沒有從QAbstractScrollArea派生出來,而是將我的窗口小部件嵌入具有垂直布局的QScrollArea ,效果很好。

我實現了resizeEvent() (我從QPlainTextEdit實現中看到了這QPlainTextEdit ),每次寬度改變時,我都會重新計算高度,並為此設置小部件的最小高度。 由於布局的工作原理,我設置了最小高度。

void MyWidget::resizeEvent(QResizeEvent *e)
{
    // If the widget's width has changed, we recalculate the new height
    // of our widget.
    if (e->size().width() == e->oldSize().width()) {
        return;
    }

    setMinimumHeight(calculateHeightFromWidth(e->size().width()));
}

對於僅繪制可見區域,請參閱獲取QPainter的可見區域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM