Причина
Поскольку я не знаю, что делает RefreshFilename();
, я не могу точно сказать, в чем причина.
Однако я вижу серьезный недостаток в вашем коде, то есть вы создаете новую сцену каждый раз, когда вызывается MainWindow::loadimage
, и это вызывает утечку памяти.
Когда вы предоставите более подробную информацию, я буду более конкретен здесь.
Решение
- Установите сцену один раз и добавьте к ней QGraphicsPixmapItem , затем в
loadImage
обновите растровое изображение элемента.
- Сохранить текущий номер в атрибуте класса.
Опять же, я буду более конкретен, когда будут добавлены детали.
Пример
В любом случае (в ожидании предоставления MVCE) я подготовил рабочий пример в соответствии с описанием вашей задачи:
#define IMAGE_COUNT 99
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
m_imgNum(0),
m_item(new QGraphicsPixmapItem())
{
auto *widget = new QWidget(this);
auto *layoutMain = new QVBoxLayout(widget);
auto *layoutButtons = new QHBoxLayout();
auto *btnPrev = new QPushButton(tr("Previous"), this);
auto *btnNext = new QPushButton(tr("Next"), this);
auto *view = new QGraphicsView(this);
view->setScene(new QGraphicsScene(this));
view->scene()->addItem(m_item);
layoutButtons->addStretch();
layoutButtons->addWidget(btnPrev);
layoutButtons->addWidget(btnNext);
layoutButtons->addStretch();
layoutMain->addWidget(view);
layoutMain->addLayout(layoutButtons);
setCentralWidget(widget);
resize(640, 480);
loadImage();
connect(btnPrev, &QPushButton::clicked, [this](){
if (m_imgNum > 0)
m_imgNum--;
else
m_imgNum = IMAGE_COUNT;
loadImage();
});
connect(btnNext, &QPushButton::clicked, [this](){
if (m_imgNum < IMAGE_COUNT)
m_imgNum++;
else
m_imgNum = 0;
loadImage();
});
}
void MainWindow::loadImage()
{
m_item->setPixmap(QString("images/image_%1.jpg").arg(m_imgNum, 2, 10, QChar('0')));
}
где m_imgNum
, m_item
и loadImage
объявлены в заголовке как:
private:
inline void loadImage();
int m_imgNum;
QGraphicsPixmapItem *m_item;