У меня есть серия QLabel
объектов в моем Qt GUI, и я заполняю их объектами HBITMAP. Эти HBITMAP являются буферами в памяти, они не существуют на диске.
Теперь я использую функцию QPixmap
s
fromWinHBITMAP to create a
QPixmap which I can then pass to the
QLabel s
setPixmap`.
Теперь возникает вопрос: что происходит с текущим изображением в QLabel, когда я перезаписываю его другим, оно остается в памяти? Это удаляется?
Я подозреваю, что он не удаляется должным образом, так как моя программа увеличивается до огромных размеров после работы в течение часа. (1,7 ГБ) в памяти.
Код, который выполняет преобразование:
//buffer is a map of QLabels which are filled with images.
void LoadPixmapFromBitmap(HBITMAP hBitmap, std::map<int, QLabel*>& buffer, int pixmapindex)
{
QPixmap pix;
pix = QPixmap::fromWinHBITMAP(hBitmap);
QPixmap temp(pix);
QSize sz(164, 121);
QPixmap resized(temp.scaled(sz));
QMatrix rotation;
rotation.rotate(90);
QPixmap rotated = resized.transformed(rotation);
//an attempt to delete the previous image properly and put in a new one. This doesn't seem to work.
if (buffer[pixmapindex]->pixmap() != NULL)
{
HBITMAP hbtmp = buffer[pixmapindex]->pixmap()->toWinHBITMAP();
buffer[pixmapindex]->clear();
HDC dc = GetDC(this->winId());
//HBITMAP p_old = SelectObject(dc, hbtmp);
BOOL deleted = DeleteObject(hbtmp);
if (!deleted)
PrintMsg("temp not deleted");
}
//////////////////////////////////end of attempt
buffer[pixmapindex]->setPixmap(rotated);
BOOL success = DeleteObject(hBitmap);
if (!success)
PrintMsg("hBitmap was not deleted");
}