QScrollbar-> setValue()在第一次单击按钮时不起作用

时间:2013-11-19 10:45:10

标签: c++ qt5

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);
   }

非常感谢任何帮助,因为我确信之前已经出现但很难找到这个具体问题。

此致

0 个答案:

没有答案