qt 레이블로 이미지를 표시하고 있습니다. 아래 코드는 다음과 같습니다.Pixmap을 얻는 것은 함수를 호출 할 때 null pixmap입니다.
void MyClass::onPushButtonClicked(QString myurl)
{
this->setCursor(Qt::WaitCursor);
ui.qtImageLabel->clear();
qDebug()<<QTime::currentTime()<<"MyClass: onPushButtonClicked";
QNetworkAccessManager *qnam_push_button_clicked_show_image;
QNetworkReply *reply;
QNetworkRequest request;
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
QUrl url(myurl);
request.setUrl(url);
qnam_push_button_clicked_show_image = new QNetworkAccessManager(this);
if(qnam_push_button_clicked_show_image)
{
QObject::connect(qnam_push_button_clicked_show_image, SIGNAL(finished(QNetworkReply*)),
this, SLOT(onPushButtonClickedRequestCompleted(QNetworkReply*)));
reply = qnam_push_button_clicked_show_image->post(request, url.encodedQuery());
QEventLoop loop;
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
}
}
void MyClass::onPushButtonClickedRequestCompleted(QNetworkReply *reply)
{
qDebug()<<QTime::currentTime()<<"MyClass: onPushButtonClickedRequestCompleted request completed";
if (reply->error() != QNetworkReply::NoError)
{
qDebug() << "Error in" << reply->url() << ":" << reply->errorString();
this->setCursor(Qt::ArrowCursor);
return;
}
QByteArray data = reply->readAll();
QPixmap pixmap;
pixmap.loadFromData(data);
int width;
int height;
//application size can be changed
QRect rec = QApplication::desktop()->screenGeometry();
height = rec.height();
width = rec.width();
qDebug()<<QTime::currentTime()<<width<<","<<height;
QSize *size = new QSize(width,height);
if(size)
{
QPixmap scaledPixmap = pixmap.scaled(*size);
ui.qtImageLabel->setPixmap(scaledPixmap);
}
if(size)
{
delete size;
size = NULL;
}
data.clear();
this->setCursor(Qt::ArrowCursor);
reply->deleteLater();
return;
}
누를 때 누름 단추를 누를 때 서버에 요청을 보내고 서버로부터받은 다른 이미지를 표시합니다. 그것은 500 번을 초과하지 않으면 잘 작동합니다. 이 오류를 처음으로 초과하면이 오류가 표시됩니다.
QPixmap::scaled: Pixmap is a null pixmap
이미지가 표시되지 않습니다. 그런 다음 누군가가 이미지 요청을 다시 보내면 다음 오류가 표시됩니다. Qt가 이벤트 핸들러에서 예외를 포착했습니다.이벤트 핸들러의 예외는 Qt에서 지원되지 않습니다. 을 다시 구현해야 QApplication::notify()
을 구현하고 거기에 모든 예외를 catch해야합니다.
위의 코드에서 오류가 발생하지 않습니다. 누군가가 해결 방법을 알려주시겠습니까?
오 당신이) 초기 onPushButtonClickedRequestCompleted (QNetworkReply * 회신'에서 반환하고 다른 작은 누수가''경우에있다 회신'에 오류가 있습니다. 이 경우에는'reply-> deleteLater();를 호출하지 않으면 응답이 누출됩니다. 일반적으로 그 슬롯에서 제일 먼저 호출하는 것이고, 슬롯이 종료 될 때까지 응답이 실제로 삭제되지 않으므로 안전합니다. 그래서 마지막에 호출 할 필요가 없습니다. –