我正在Qt Creator中与Designer一起工作,并且其中包含一个QMainWindow
的{{1}}。因为程序会加载图片并将其显示在标签内,所以我希望在扩展或缩小QLabel
时,标签在设置的边界内以1.25的比例进行调整大小。标签应调整INDEPENDENT的大小,并从其内容重新调整INDEPENDENT。
我想要什么:
因此我...
QMainWindow
的{{1}}内添加了QLabel
(称为imageLabel
)centralWidget
的布局设置为网格布局(QMainWindow
)centralWidget
:
元素结构:
这不起作用,因为我无法在“几何形状”部分中设置初始大小。标签虽然遵循最小值和最大值,但并未按固定比例缩放。
在回答that之后,我设置了初始像素图:
QGridLayout
什么都没改变。
我还应用了其他answer的类并将其提升为小部件:
那也没什么改变。
然后我结合了2.和3.方法,并设置了一个初始像素图,......
...什么都没改变。
这是方法1.-4.的作用:
在小部件中添加4.方法的标签:
标签完全不会调整大小:
那么,如何使标签的初始尺寸为640 x 512,并以固定比例在1280 x 1024和320 x 256之间缩放?
答案 0 :(得分:1)
一种可能的解决方案是将eventFilter安装到Centralwidget,以便进行所需的计算来设置大小。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->centralWidget->installEventFilter(this);
ui->imageLabel->setPixmap(QPixmap(":/image.png"));
ui->imageLabel->setScaledContents(true);
}
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
const float ratio = 1.25;
if(watched == ui->centralWidget && event->type() == QEvent::Resize
&& ui->centralWidget->width() > 0
&& ui->centralWidget->height() > 0){
float central_ratio = 1.0*ui->centralWidget->width()/ui->centralWidget->height(); QSize s;
if(central_ratio > ratio){
s = QSize(ratio*ui->centralWidget->height(), ui->centralWidget->height());
}
else{
s = QSize(ui->centralWidget->width(), ui->centralWidget->width()/ratio);
}
ui->imageLabel->resize(s);
}
return QMainWindow::eventFilter(watched, event);
}