[英]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.