【问题标题】:Incorrect behaviour of scroll bars upon zooming an image in qt在 qt 中缩放图像时滚动条的不正确行为
【发布时间】:2019-10-09 22:45:24
【问题描述】:

我正在尝试为我的类似图像查看器的应用程序实现缩放功能。 我正在上传这样的图片:

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 - 缩小一次) 对可能的解决方案有任何想法吗?

【问题讨论】:

标签: c++ image qt zooming qlabel


【解决方案1】:

我已经找到了一个解决方案,但我仍然不知道为什么现在可以工作,但是通过代码创建滚动区域和标签,然后使用 setWidget 方法解决了我的问题。 .h 文件中的声明:

QLabel *imageLabel;
QScrollArea *scrollArea;

.cpp 文件中的构造函数:

imageLabel = new QLabel;
imageLabel->setBackgroundRole(QPalette::Base);
imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
imageLabel->setScaledContents(true);


scrollArea = new QScrollArea;
ui->verticalLayout_4->addWidget(scrollArea);
scrollArea->setWidget(imageLabel);

【讨论】:

    猜你喜欢
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多