滚动条控制 Qt 中滚动区域的滚动

Posted

技术标签:

【中文标题】滚动条控制 Qt 中滚动区域的滚动【英文标题】:Scroll Bar Controlling scrolling a Scroll Area in Qt 【发布时间】:2011-08-03 15:01:23 【问题描述】:

我是 QT 框架的新手,所以请多多包涵……

我接到了这个简单的任务,我有一系列 Qlabel,每个都设置为 .png pic

这些 Multiple Qlabels 不适合屏幕,所以这里的滚动条会很方便...

所以我将我所有的项目都插入到我的滚动区域中

看看情况:

我想让滚动条控制滚动区域上下滚动

我已经创建了插槽slideMoved(),它吸收了幻灯片移动时滚动条产生的信号

这是 Form.cpp 类:

//Form.cpp
#include "form1.h"
#include "form.h"
#include "ui_form.h"
#include "ui_form1.h"
#include<QScrollArea>
#include<QScrollBar>

Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)

    ui->setupUi(this);




Form::~Form()

    delete ui;


void Form::slideMoved()



我的问题如下,

-我这样做对吗,或者他们是另一种更简单的方法?

-slideMoved() 应该如何通过上下滚动滚动区域来处理事件

由于我是新手,请具体说明,我将不胜感激

谢谢

【问题讨论】:

【参考方案1】:

如果你想创建一个槽,你必须指定它是一个槽。

这样做是这样的

private slots:
    void slideMoved();

那么你必须按照你的方式实现这个槽。

void Form::slideMoved(int val)

    ...

最后,您必须将信号连接到您的插槽,以便在发出信号时触发您的插槽。

connect(sender,SIGNAL(sliderMoved(int)),receiver,SLOT(slideMoved(int)));

然后您可以创建一个新变量来保存之前的滑块值。 每次执行您的插槽时,您都会将之前的值与新的值进行比较,以了解动作。

private:
    int previousValue;

插槽可以是这样的。

void Form::slideMoved(int val)
    
        if(val<previousValue) qDebug() << "Previous value is smaller";
        else qDebug() << "Previous values is bigger";
        previousValue = val;
    

您可以阅读有关信号和插槽的更多信息here

【讨论】:

谢谢你mesekech,但这没有帮助,你只解释了已知的信号和槽机制,你没有具体说明如何控制滚动区域容器,你没有回答我的问题

以上是关于滚动条控制 Qt 中滚动区域的滚动的主要内容,如果未能解决你的问题,请参考以下文章

QT中如何给主窗口添加滚动条

QT滚动条的问题?

vue 滚动条选中元素自动滚动到可视区域里居中显示

jquery中的scrollTop控制浏览器的滚动条

如何在qt中同时移动滚动条

QT MainWindow 滚动条