如何使用键盘移动QSlider滑块手柄?

时间:2010-09-06 10:47:55

标签: qt qt-creator

我无法弄清楚如何在QT中移动QSlider的滑块手柄。当我按下例如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 个答案:

答案 0 :(得分:3)

我相信使用setSliderPosition方法是在代码中移动滑块的正确方法。 setTickPosition设置了如何绘制刻度线的方式,所以我猜,这不是你需要的。至于拦截键盘事件:您可以在表单ui控件上安装一个事件过滤器,并将滑块移动逻辑放在那里。以下是一个例子。有关事件过滤器here

的更多详细信息
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);
}

希望这有帮助,尊重