Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 在运行时添加带有图像的QLabel时忽略图像缩放_Qt_Widget_Qwidget_Qlabel - Fatal编程技术网

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

Qt 在运行时添加带有图像的QLabel时忽略图像缩放,qt,widget,qwidget,qlabel,Qt,Widget,Qwidget,Qlabel,我试图在运行时将带有图像的QLabel添加到我的GUI中,但是缩放被忽略,图像扩展到比屏幕大的完整大小,忽略大小限制,并且无法正确缩放内容 如我的GridLayout所述,图像应位于窗口的底部左侧: headerPnl= new HeaderPnl(); buttonPnl = new ButttonPnl; mainContentPnl = new QStackedWidget; mainLayout = new QGridLayout; mainLayout->setMargin(0

我试图在运行时将带有图像的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元素,即单击右按钮时。这有意义吗?

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

在第一个代码段中添加:

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

因此,当我这样做时,它确实保持了headerPnl的相同大小,不会延伸到屏幕外,但mainContentPnl(在本例中,它只是一个带有图像的QLabel)仍然在屏幕外展开,并且按钮也被推离屏幕,不可见