我试图在运行时将带有图像的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元素。这有道理吗?
答案 0 :(得分:1)
您对包含QGridLayout的小部件有一个QSizePolicy吗?我建议使用水平和垂直的QSizePolicy :: Fixed。
在您的第一个代码段中添加:
this->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);