Я пытаюсь реализовать функцию масштабирования для моего приложения, похожего на средство просмотра изображений.
Я загружаю изображение так:
void MeasuresWidget::on_actionOpen_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open File"), QDir::currentPath());
if (!fileName.isEmpty())
{
QImage image(fileName);
if (image.isNull()) {
QMessageBox::information(this, tr("Image Viewer"),
tr("Cannot load %1.").arg(fileName));
return;
}
ui->imageLabel->setPixmap(QPixmap::fromImage(image));
}
scaleFactor = 1.0;
// ui->imageLabel->adjustSize();
}
И увеличить / уменьшить масштаб так:
void MeasuresWidget::on_actionZoom_in_triggered()
{
scaleImage(1.25);
}
void MeasuresWidget::on_actionZoom_out_triggered()
{
scaleImage(0.8);
}
void MeasuresWidget::scaleImage(double factor)
{
Q_ASSERT(ui->imageLabel->pixmap());
scaleFactor *= factor;
ui->imageLabel->resize(scaleFactor * ui->imageLabel->pixmap()->size());
adjustScrollBar(ui->scrollArea->horizontalScrollBar(), factor);
adjustScrollBar(ui->scrollArea->verticalScrollBar(), factor);
}
void MeasuresWidget::adjustScrollBar(QScrollBar *scrollBar, double factor)
{
scrollBar->setValue(int(factor * scrollBar->value()
+ ((factor - 1) * scrollBar->pageStep()/2)));
}
Проблема в том, что при увеличении / уменьшении полосы прокрутки не меняют свой размер, т. Е. Размер области прокрутки всегда равен размеру загруженного изображения, независимо от того, увеличиваю я его или уменьшаю. Картинки иллюстрируют мою проблему (1 - без увеличения, 2 - с уменьшением масштаба) Есть идеи о возможном решении?