我无法弄清楚如何在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()
之间的区别是如何实现我的想法,而不是事先提供任何帮助
答案 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);
}
希望这有帮助,尊重