QT5.12中,Qt::KeepAspectRatio,Qt::SmoothTransformation等比縮放沒有隨label窗口縮放

在Qt 5.12中,Qt::KeepAspectRatio和 Qt::SmoothTransformation 是用于控制圖像縮放行為的選項(xiàng),但它們并不直接與窗口大小變化或控件大小變化自動(dòng)關(guān)聯(lián)。如果希望在窗口或控件大小改變時(shí)保持圖像比例不變,并且縮放時(shí)保持平滑,你可能需要通過(guò)信號(hào)和槽機(jī)制來(lái)實(shí)現(xiàn)這些效果。

以下是一種可能的實(shí)現(xiàn)方式,假設(shè)你有一個(gè) QLabel 來(lái)顯示圖像,并希望在其大小改變時(shí)保持圖像比例和平滑縮放:


1.繼承 QLabel 創(chuàng)建子類

創(chuàng)建一個(gè)新的類繼承自 QLabel,可以在這個(gè)類中重寫 resizeEvent 方法,以便在 QLabel 大小變化時(shí)捕獲并處理這個(gè)事件。


?? //mylabel.h

??#include <QLabel>


??class MyLabel : public QLabel {

??????Q_OBJECT

??public:

??????MyLabel(QWidget *parent = nullptr);

??protected:

??????void resizeEvent(QResizeEvent *event) override;

?? };


?? //mylabel.cpp

??#include "mylabel.h"


??MyLabel::MyLabel(QWidget *parent) : QLabel(parent) {}


??void MyLabel::resizeEvent(QResizeEvent *event) {

??????if (!pixmap())

??????????return;


??????//獲取當(dāng)前 Label 的大小

??????QSize sz = event->size();


??????//縮放圖像,并保持比例和平滑

??????QPixmap scaledPixmap = pixmap()->scaled(sz, Qt::KeepAspectRatio,Qt::SmoothTransformation);


??????//設(shè)置縮放后的圖像到 Label 中

??????setPixmap(scaledPixmap);

?? }



2.在主窗口中使用MyLabel

在你的主窗口或者其他的 QWidget 中使用這個(gè)自定義的 MyLabel 類來(lái)顯示圖像,而不是直接使用 QLabel。


?? //mainwindow.cpp (示例中的主窗口)

??#include "mainwindow.h"

??#include "mylabel.h"


??MainWindow::MainWindow(QWidget *parent)

??????: QMainWindow(parent)

?? {

??????//創(chuàng)建 MyLabel 實(shí)例

??????MyLabel *label = new MyLabel(this);


??????//加載圖像到Label

??????QPixmap image(":/images/myimage.jpg"); //替換成你的圖像路徑

??????label->setPixmap(image);


??????//將 Label 放置到主窗口的布局中,或者直接設(shè)置為主窗口的中心部件

??????setCentralWidget(label);

?? }


通過(guò)這種方式,當(dāng)主窗口或者包含 MyLabel 的父控件大小改變時(shí),MyLabel 將捕獲到 resizeEvent,在這個(gè)事件中重新計(jì)算并縮放圖像,以保持比例和平滑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容