[英]How to set an Image on QLabel from other form in Qt
在学习主要主题之前,请注意我是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中添加了一个按钮进行测试。 单击时,setImage起作用。 但是当我在AddIm中执行setImage时。 它不起作用。 请让我知道为什么
您的问题与您对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();
}
您没有显示窗口。
首先,您必须创建一个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();
并记住在AddIm.h中包含MainWIndow
#include "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
主窗口
#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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.