在Qt旋转表盘后增加计数?

时间:2014-11-30 20:23:39

标签: c++ qt

所以基本上我想做的是在Qt中使用Dial并显示用户使用LCD Number旋转它的次数。当滑块移动360度时,信号将增加计数器并显示该数字。如果我们定义要通过的阈值,例如359,那么用户可以通过简单地多次通过阈值来滥用它。如果我们只计算表盘已经移动了多少度数,那么用户也可以通过来回移动来滥用它,而无需沿着表盘的整个长度行进。所以我认为让它正常工作的方法是,一旦它们在一个方向上行进360或-360个单位,计数就会增加;如果用户要改变他们的方向,他们的新距离将与他们之前的行进距离抵消,从而允许真正的旋转。这是我到目前为止的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->connect(this->ui->dial, SIGNAL(sliderMoved(int)), this,SLOT(dial_incrementer()));
    this->counter = 0;
    this->ui->lcdNumber->display(counter);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::dial_incrementer()
{
    counter++;
    this->ui->lcdNumber->display(counter);
}

和我的标题:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    int counter;

private slots:
    void dial_incrementer();

    void on_dial_sliderMoved(int position);
};

#endif // MAINWINDOW_H

不幸的是,我不确定从哪里拿走它; sliderMoved()当然是在操作,所以每当表盘移动一个单位时,计数就会递增,这显然不是我们想要的。

1 个答案:

答案 0 :(得分:1)

根本技巧是检测旋转方向。在dial_incrementer()中,您需要减去新值和(记忆的)先前值。结果数字的符号将为您提供旋转方向。