如何在QT中的其他形式上在Qlabel上设置图像

How to set an Image on QLabel from other form in Qt

本文关键字:Qlabel 设置 形式上 图像 QT 其他      更新时间:2023-10-16

在接受主要主题之前,请注意我是QT的初学者。我做了一个addim.cpp,我想在mainwindow的qlabel上设置一个图像。

这是我的来源Addim.cpp

void AddIm::on_pushButton_clicked()
{
    MainWindow mainwindow;
    mainwindow.setImage();
}

这是mainwindow.cpp

void MainWindow::setImage()
{
    QPixmap pix("./test.jpg");
    ui->label->setPixmap(pix);
}

和mainwindow.h

class MainWindow : public QMainWindow
{
    public:
    void setImage();
    ~ some source ~
    private:
    Ui::MainWindow *ui;
};

它根本不起作用。因此,我在MainWindow中添加了一个按钮进行测试。当它单击时,设置有效。但是,当我在Addim中执行设置时。它行不通。请让我知道为什么

您的问题与您对QT的知识无关,而是您对C 的了解。

AddIm::on_pushButton_clicked()中,您可以在堆栈上创建一个新的MainWindow对象,创建图像,然后退出函数。

当功能退出时,所有局部堆栈对象都会被破坏。这意味着您的图像确实正在加载,但是在您有机会看到它之前,窗口被破坏了。即使它的寿命比允许的功能更长,您也永远不会显示窗口,因此它仍然隐藏。

更新:

AddIm.cpp更改为以下内容:

void AddIm::on_pushButton_clicked()
{
    MainWindow *mainwindow = new MainWindow;
    mainwindow->setAttribute(Qt::WA_DeleteOnClose, true);
    mainwindow->setImage();
    mainwindow->show();
}

与您的代码进行比较,以查看您可能出错的地方。我尽可能地尝试像您一样编码它。我几乎不使用设计师,我喜欢对所有内容进行编码。它按预期工作。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
#include <QLabel>
#include <QPixmap>
class MainWindow : public QWidget {
    Q_OBJECT
public:
    void setImage();
private:
    QLabel *label;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
void MainWindow::setImage() {
    QPixmap pix(":/test.jpg");
    label = new QLabel;
    label->setPixmap(pix);
    label->show();
}

addim.h

#ifndef ADDIM_H
#define ADDIM_H
#include <QMainWindow>
#include <QPushButton>
#include <QHBoxLayout>
#include "mainwindow.h"
class AddIm : public QMainWindow {
    Q_OBJECT
public:
    AddIm(QWidget *parent = 0);
    ~AddIm();
private slots:
    void on_pushButton_clicked();
private:
    QPushButton *button;
};
#endif // ADDIM_H

addim.cpp

#include "addim.h"
AddIm::AddIm(QWidget *parent) : QMainWindow(parent) {
    button = new QPushButton("Show Image");
    setCentralWidget(button);
    connect(button, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
}
void AddIm::on_pushButton_clicked() {
    MainWindow mainwindow;
    mainwindow.setImage();
}
AddIm::~AddIm() {
}

main.cpp

#include "addim.h"
#include <QApplication>
int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    AddIm window;
    window.show();
    return a.exec();
}

您未显示窗口。

首先,您必须创建一个C 类,而不是一个.cpp文件。然后将指针添加到addim.h文件中的窗口:

private:
MainWindow* mainwindow;

然后在您的addim.cpp文件中:

mainwindow = new MainWindow(this);
mainwindow->setAttribute(Qt::WA_DeleteOnClose, true); // prevent memory leak when closing window
mainwindow->setImage();
mainwindow->show();

并记住将MainWindow包含在Addim.h

#include "mainwindow.h"