在运行时添加带有图像的QLabel时,图像缩放会被忽略

时间:2018-08-08 15:06:07

标签: qt widget qwidget qlabel

我试图在运行时将带有图像的QLabel添加到我的GUI中,但是缩放被忽略,并且图像扩展到其完整大小(大于屏幕),忽略了大小限制,而不缩放内容正确。

图像应适合窗口的底部,如我的GridLayout在此处所述:

headerPnl= new HeaderPnl();
buttonPnl = new ButttonPnl;
mainContentPnl = new QStackedWidget;

mainLayout = new QGridLayout;
mainLayout->setMargin(0);
mainLayout->setSpacing(0);
mainLayout->addWidget(headerPnl, 0, 0, 1, 7);
mainLayout->addWidget(mainContentPnl, 1, 0, 10, 6);
mainLayout->addWidget(buttonPnl, 1, 6, 10, 1);

mainLayout->setRowStretch(0,1);
mainLayout->setRowStretch(1,2);
mainLayout->setRowStretch(2,2);
mainLayout->setRowStretch(3,2);
mainLayout->setRowStretch(4,2);
mainLayout->setRowStretch(5,2);
mainLayout->setRowStretch(6,2);
mainLayout->setColumnStretch(0,1);
mainLayout->setColumnStretch(1,1);
mainLayout->setColumnStretch(2,1);
mainLayout->setColumnStretch(3,1);
mainLayout->setColumnStretch(4,1);
mainLayout->setColumnStretch(5,1);
mainLayout->setColumnStretch(6,1);

this->setLayout(mainLayout);

标题横穿顶部,按钮面板沿右侧,并且屏幕的其余部分根据应用程序的工作流程(即,按下了哪些按钮等)而变化。

必要时,我的GUI替换小部件并按如下方式更新GUI:

void MainWindow::setContentPane(QWidget *content){
    mainLayout->replaceWidget(contentPnl, content);
    contentPnl = content;
}

void MainWindow::setButtonPanel(QWidget *buttonPanel){
    mainLayout->replaceWidget(buttonPnl, buttonPanel);
    buttonPnl = buttonPanel;
}


void MainWindow::configureWelcome(){

    QLabel *welcomeLbl = new QLabel;
    welcomeLbl->setObjectName("welcomeLbl");
    welcomeLbl->setPixmap(QPixmap(":/images/welcome.jpg"));
    welcomeLbl->setScaledContents(true);

    CustomWidget *welcomeWidget = new CustomWidget;
    QHBoxLayout *welcomeLayout = new QHBoxLayout;
    welcomeLayout->addWidget(welcomeLbl);
    welcomeWidget->setLayout(welcomeLayout);
    setContentPane(welcomeWidget);

    CustomWidget *buttonPnl = createWelcomeButtonPanel();
    setButtonPanel(buttonPnl);
}

如何使此图像正确适合GridLayout?在将小部件添加到已设置的布局中时,GUI似乎不知道如何处理GridLayout的大小约束。装回按钮可以很好地工作,但不能添加图像。

侧面问题:我一直在尝试远离QStackedWidget,因为此应用程序是为低功耗系统设计的,因此创建所有可能的屏幕并将它们全部添加到QStackedWidget上对我来说没有任何意义应用程序启动时。相反,我宁愿在必要时使用资源,并且仅在需要时(即,单击正确的按钮时)创建所有GUI元素。这有道理吗?

1 个答案:

答案 0 :(得分:1)

您对包含QGridLayout的小部件有一个QSizePolicy吗?我建议使用水平和垂直的QSizePolicy :: Fixed。

在您的第一个代码段中添加:

this->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);