【问题标题】:Scroll Bar Controlling scrolling a Scroll Area in Qt滚动条控制 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() 应该如何通过上下滚动滚动区域来处理事件

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

谢谢

【问题讨论】:

    标签: c++ qt scroll


    【解决方案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,但这没有帮助,你只解释了已知的信号和槽机制,你没有具体说明如何控制滚动区域容器,你没有回答我的问题
    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多