如何在不使用滚动条的情况下使视图更改

  • 本文关键字:情况下 视图 滚动条 c++ qt
  • 更新时间 :
  • 英文 :


我想做的是,我有一个程序,里面充满了图像,这些图像会离开屏幕,所以显然可以在这里使用 QScrollBar。我想知道是否有可能像必须滚动的视觉条一样,您可以像按向右箭头键或向左箭头键滚动一样?比如,是否有一个函数我可以在被覆盖的 keyPressEvent 中调用来更改视图?

我确实有一个想法,虽然当我打印图片时,我可以有一个偏移量,所以当我按向右或向左箭头键时,它会从整数中添加或减去一个数字,这样它就可以添加到绘画算法中的 x 坐标中打印图像以人为地改变视图?

private:
int xOffset;
public:
void keyPressEvent(QKeyEvent *e) override
{
if(e->key() == Qt::RightArrow)
{
++xOffset;
}
if(e->key() == Qt::LeftArrow)
{
--xOffset;
}
} 

然后在绘画事件中将偏移量添加到图像的 x 以更改视图

paint(QPainter *qp)
{
for(int l{0}; l < M_images; ++l)
{
qp.fillRect(M_x+xOffset, M_y, 50, 50, "Pic.png");
}
}

获得该行为的最简单方法是使您的小部件成为QScrollArea小部件的目标。 QScrollArea 将为您处理按键和滚动/偏移渲染,并提供滚动条(如果你想要它们 - 如果你不这样做,它们不是强制性的;请参阅下面示例底部附近的注释(

#include <QApplication>
#include <QGridLayout>
#include <QMainWindow>
#include <QScrollArea>
#include <QPushButton>
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
QMainWindow * mw = new QMainWindow;
mw->setWindowTitle("QScrollArea demo -- press arrow keys!");
QScrollArea * sa = new QScrollArea;
mw->setCentralWidget(sa);
QWidget * scrollMe = new QWidget;
QGridLayout * gl = new QGridLayout(scrollMe);
for (int row=0; row<99; row++)
{
for (int col=0; col<99; col++)
{
QPushButton * pb = new QPushButton(QString("%1.%2").arg(row+1).arg(col+1));
gl->addWidget(pb, row, col);
}
}
sa->setWidget(scrollMe);
// Comment these two lines out if you want visible scroll bars
sa->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
sa->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
mw->resize(500, 500);
mw->show();
return app.exec();
}

相关内容

最新更新