2016-09-22 53 views
0

一個QProgressBar保持寬高比Qt 5.7.0(使用Qt Creator 4.1.0)我希望我的`QProgressBar *調整大小(當其外部物件的尺寸增大或減小),而保持其寬高比調整Qt中

例如,假設QProgressBar最初具有width=60height=30的矩形形狀。請注意,QProgressBar位於QFrame之內,QGridLayout

我發現了關於使用QPixmap的圖像的類似方法。調查了我如何使用Qt::KeepAspectRatio,但找不到任何示例。

更新

理想情況下,我想在進度條內的文本的字體大小與進度條本身相應調整。

+1

爲什麼你需要保持'QProgressBar'的寬高比?默認情況下,一個'QProgressBar' [寬度的策略設置爲Fixed](https://doc.qt.io/qt-5/qwidget.html#sizePolicy-prop),因爲它是一個水平定向的小部件* 。你可以將它設置爲「Expanding」,但這會使得'QProgressBar'佔據所有的空白空間(不保持寬高比)。 – Mike

+0

@Mike我需要改變進度條的大小和-crucially-我需要它來調整它的寬度和它調整大小的高度。所有這些同時保持如上所述的縱橫比。 –

+0

@Mike您能否提供一小段代碼來演示這個'resizeEvent'? –

回答

0

您應該將QProgressBar放入one of the Qt's Layouts之一,例如QVBoxLayout。檢查Qt Layouts Example(s)

+0

它已經在具有網格佈局的'QFrame'中。你能建議/展示我如何做到這一點。 –

+0

檢查[這個例子](http://www.bogotobogo.com/Qt/Qt5_GridLayout.php)。 – KernelPanic

+0

我也讀過這個例子;不幸的是,它沒有提到調整大小,同時保持寬高比。 –

0

實驗以下的東西。

過濾進度條的resize事件,並根據需要設置其中一側。

void MyClass::init() { 
    ui->myProgressBar->installEventFilter(this); 
} 

bool MyClass::eventFilter(QObject * obj, QEvent * e) { 
    if(e->type() == QEvent::Resize) { 
     ui->myProgressBar->setFixedWidth(ui->myProgressbar->height() * 88); 
     return true; 
    } 
    return QObject::eventFilter(obj, e); 
}