Hello Stackoverflowers,
我真的很想找到这个bug的解决方案。我正在使用QScroll区域和按钮使用户能够跳转到设置QLabels像素图内部图像的坐标。按钮单击信号使用存储在结构中的坐标(滚动条设置值)连接到水平和垂直滑块的设定值槽。
我设置的一些坐标值被缩小,因此没有可见的垂直滚动条(尽管我设置了scrollbaralwayson以尝试解决此问题)。
问题是,当我说没有垂直滚动条的图像时,然后单击一个调用需要垂直滚动的图像的按钮,并调用设置值,滚动条出现但不滚动。再次按下按钮可将滑块移动到正确的位置。
我知道这与第一次点击时不存在的垂直滚动条有关(因为我从一张不需要的图像开始)。
有人可以帮忙吗?代码很大并且分散开来,但这里是相关部分。我甚至尝试将函数转换为信号以防止阻塞,但这也无效。
// Handles zooming the image to the correct level. This is a slot.
void MainWindow::resizeImage(double xScale, double yScale)
{
ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled (xScale,yScale,Qt::KeepAspectRatio,Qt::FastTransformation)));
}
// Handles moving the scroll bars to the correct positions. This is a slot.
void MainWindow::adjustScrollBar(int dx, int dy, double xFactor, double yFactor)
{
ui->imageScrollArea->horizontalScrollBar()->setValue(dx * xFactor);
ui->imageScrollArea->verticalScrollBar()->setValue(dy * yFactor);
}
// Handles a push button click, from a button group.
void MainWindow::buttonClick(int id)
{
int index = (id -1); // 0 indexed structure
emit scaleImage(detailviewX, detailviewY);
// Acquire view Coordinates from model
viewInfo tmp = list[index];
int x = tmp.xCoord;
int y = tmp.yCoord;
int xBar = ui->imageScrollArea->horizontalScrollBar()->maximum();
int yBar = ui->imageScrollArea->verticalScrollBar()->maximum();
if(xBar != 0 && xBarDetailview != 0) // If any of the bars are 0 I cannot work out factor as division by 0 doesn't help.
{
xFactor = (xBar / xBarDetailview);
}
if(yBar != 0 && yBarDetailview != 0)
{
yFactor = (yBar / yBarDetailview);
}
emit adjustScrollBar(x,y,xFactor,yFactor);
}
非常感谢任何帮助,因为我确信之前已经出现但很难找到这个具体问题。
此致