如何在不使用滚动条的情况下使视图更改
How to make the view change without visually using a scrolling bar
我想做的是,我有一个程序,里面充满了图像,这些图像会离开屏幕,所以显然可以在这里使用 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();
}
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 在C++中如何在没有pow的情况下进行基础计算
- 松弛原子与无同步情况下的记忆连贯性
- 如何在不使用滚动条的情况下使视图更改
- Cython:如何在不需要 GIL 的情况下从 numpy 内存视图转到矢量[对[双,双]]?
- 如何在没有动态内存分配(堆)的情况下为可变大小数组(矢量)定义安全容器或视图