1

您好,我正在使用 QT 将图像加载到 GUI。我可以轻松地将一个文件加载到一个标签中。当我想将新图像加载到同一个标签中时,就会出现问题。本质上,我想更新该标签。我试图通过按下一个使用 SetPixmap 作为插槽功能的按钮来做到这一点。但是,使用 SetPixmap 的直接调用可以工作,但是当它在插槽中时,它对我不起作用。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <iostream>
#include <qdebug>
#include <QLabel>
#include <QPixmap>
#include <QTcore>

using namespace std;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QImage Hellkite_Tyrant;
    Hellkite_Tyrant.load(":/MtGimages/HT.jpg");

    QImage Island;
    Island.load(":/MtGimages/Island.jpg");

    if(Hellkite_Tyrant.isNull())
    {
        ui->textlabel->setText("Did not work");
    }
    //ui->myLabel->setPixmap(QPixmap::fromImage(Hellkite_Tyrant));
    ui->myLabel->hide();



    connect(ui->pushButton,SIGNAL(clicked()),
            ui->myLabel,SLOT(setPixmap(QPixmap::fromImage(Hellkite_Tyrant))));

    connect(ui->pushButton,SIGNAL(clicked()),
            ui->myLabel,SLOT(show()));

   // connect(ui->pushButton_2,SIGNAL(clicked()),
    //        ui->myLabel,SLOT(setPixmap(QPixmap::fromImage(Island))));

   // connect(ui->pushButton_2,SIGNAL(clicked()),
   //         ui->myLabel,SLOT(repaint()));

   // connect(ui->pushButton_2,SIGNAL(clicked()),
   //         ui->myLabel,SLOT(show()));
}

MainWindow::~MainWindow()
{
    delete ui;
}
4

1 回答 1

2

信号的签名必须与接收时隙的签名相匹配。因此,这些代码段有问题。

connect(ui->pushButton,SIGNAL(clicked()),
        ui->myLabel,SLOT(setPixmap(QPixmap::fromImage(Hellkite_Tyrant))));

你应该这样做。

// mainwindow.h

class MainWindow: public QMainWindow
{
...

protected slots:
    void on_pushButton_clicked();

...
};

// mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
...

    connect(ui->pushButton,SIGNAL(clicked()),
            this, SLOT(on_pushButton_clicked()));

}

void MainWindow::on_pushButton_clicked()
{
    ui->myLabel->setPixmap(QPixmap::fromImage(Hellkite_Tyrant));
    ui->myLabel->show();
}
于 2013-07-19T06:03:55.357 回答