Как мне переместить ручку слайдера QSlider с помощью клавиатуры? - PullRequest
1 голос
/ 06 сентября 2010

Я не могу понять, как я могу перемещать ручку ползунка QSlider в QT.Когда я нажимаю, например, A (я хочу переместить курсор влево) и D (я хочу переместить курсор вправо), я сделал

(void) new QShortcut(Qt::Key_A, this, SLOT(moveTickmarkLeft()));
    (void) new QShortcut(Qt::Key_D, this, SLOT(moveTickmarkRight()));

реализацию:

void LCDRange::moveTickmarkLeft()
{
    slider->setSliderPosition(slider->sliderPosition - 1);
}

void LCDRange::moveTickmarkRight()
{
    slider->setSliderPosition(slider->sliderPosition + 1);
}

то же самое, что я сделалиспользуя функцию setTickPosition(), в чем разница между setSliderPosition() и setTickPosition() как я могу реализовать свою идею, спасибо заранее за любую помощь

1 Ответ

3 голосов
/ 06 сентября 2010

Я считаю, что использование setSliderPosition является правильным способом перемещения вашего ползунка в коде. setTickPosition установить способ рисования галочки, так что, думаю, это не то, что вам нужно. Что касается перехвата событий клавиатуры: вы можете установить фильтр событий на элементы управления пользовательского интерфейса формы и поместить туда логику перемещения ползунка. Ниже приведен пример. Подробнее о фильтре событий здесь

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // install event filter to ui controls of the window
    ui->textEdit->installEventFilter(this);
    ui->pushButton->installEventFilter(this);
    ui->horizontalSlider->installEventFilter(this);
}

// event filter implementation
bool MainWindow::eventFilter(QObject* watched, QEvent* event)
{
    if (event->type() == QEvent::KeyPress )
    {
        QKeyEvent* keyEvent = (QKeyEvent*)event;
        if (keyEvent->key()=='A')
        {
            qDebug() << "move slider";
            ui->horizontalSlider->setSliderPosition(ui->horizontalSlider->sliderPosition()+1);
        }
        else if (keyEvent->key()=='B')
        {
            qDebug() << "move slider";
            ui->horizontalSlider->setSliderPosition(ui->horizontalSlider->sliderPosition()-1);
        }

    }
    return QMainWindow::eventFilter(watched, event);
}

надеюсь, это поможет, с уважением

...