2014-11-30 2 views
1

Итак, в основном я хотел бы сделать набор в Qt и отобразить количество раз, когда пользователь повернул его с помощью ЖК-номера. Сигнал будет, когда ползунок перемещается на 360 градусов, увеличивает счетчик и отображает это число. Если мы определим порог для передачи, например 359, тогда пользователь может оскорбить это, просто пройдя порогом несколько раз. Если мы просто подсчитаем, сколько градусов пройденный циферблат, пользователь может злоупотреблять этим, путешествуя туда и обратно, не путешествуя по всей длине циферблата. Поэтому я полагаю, что метод, чтобы заставить это работать должным образом, - это когда они перемещаются на 360 или -360 единиц в направлении, счет увеличивается; если пользователь должен был изменить свое направление, их новое расстояние сократилось бы с их предыдущим расстоянием перемещения, что обеспечило бы истинное вращение. Это код, который я до сих пор:Инкрементный счет после вращения циферблата в Qt?

#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

Основной трюк заключается в определении направления вращения. В dial_incrementer() вам нужно вычесть новое значение и (запомненное) предыдущее значение. Знак полученного числа даст вам направление вращения.

Смежные вопросы