目前知道ListWidget获得焦点后按PageUp/PageDown可以翻页,或者通过setCurrentRow来定位光标翻页.
这两种方法都不能很好在我的程序上实现,
前者因为程序有一个LineEdit控件需要长期获得焦点,所以不能实行.
后者运算起来很慢,很麻烦.
求大神支招,有没有方法可以操作滚动条滚动或者其他方法实现ListWidget翻页?
现在有个想法,当按下PageUp/PageDown后,ListWidget获得焦点,并自行重复一次PageDown/PageDown动作,再把焦点交还给LineEdit. 但不知道怎么自行重复PageUp/PageDown按键动作...
8 个解决方案
#1
重载keyPressEvent ( QKeyEvent * event )试试
#2
试过了,PageUp/PageDown要在ListWidget活动焦点后才有效果,但是我的LineEdit要长期获取焦点,所以貌似不行
#3
用eventFilter做
#4
能否给个例子,不胜感激
#5
Widget::Widget(QWidget *parent) :
QWidget(parent)
{
yourLineEdit = new QLineEdit(this);
yourLineEdit->installEventFilter(this);
}
bool Widget::eventFilter(QObject *obj, QEvent *event)
{
if (obj == yourLineEdit)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == Qt::Key_PageDown)
{
//处理向下翻页
return true;
}
if (keyEvent->key() == Qt::Key_PageUp)
{
//处理向上翻页
return true;
}
return false;
}
else
{
return false;
}
}
else
{
return QWidget::eventFilter(obj, event);
}
}
你试试这样行不行
#6
首先谢谢你的帮助,不过你没有找到我问题重点..
我现在出现的问题就是不知道怎么处理上下翻页..
#7
可以重写一下LineEdit,因为你的lineEdit可以长期获得焦点,所以在lineEdit里接受keyPressEvent,接收到pageUp或者pageDown时发送信号至你的widget,然后在widget里通过接收信号实现上下翻页。
#8
补充一下,其实3楼的办法也是可以实现的。
#1
重载keyPressEvent ( QKeyEvent * event )试试
#2
试过了,PageUp/PageDown要在ListWidget活动焦点后才有效果,但是我的LineEdit要长期获取焦点,所以貌似不行
#3
用eventFilter做
#4
能否给个例子,不胜感激
#5
Widget::Widget(QWidget *parent) :
QWidget(parent)
{
yourLineEdit = new QLineEdit(this);
yourLineEdit->installEventFilter(this);
}
bool Widget::eventFilter(QObject *obj, QEvent *event)
{
if (obj == yourLineEdit)
{
if (event->type() == QEvent::KeyPress)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == Qt::Key_PageDown)
{
//处理向下翻页
return true;
}
if (keyEvent->key() == Qt::Key_PageUp)
{
//处理向上翻页
return true;
}
return false;
}
else
{
return false;
}
}
else
{
return QWidget::eventFilter(obj, event);
}
}
你试试这样行不行
#6
首先谢谢你的帮助,不过你没有找到我问题重点..
我现在出现的问题就是不知道怎么处理上下翻页..
#7
可以重写一下LineEdit,因为你的lineEdit可以长期获得焦点,所以在lineEdit里接受keyPressEvent,接收到pageUp或者pageDown时发送信号至你的widget,然后在widget里通过接收信号实现上下翻页。
#8
补充一下,其实3楼的办法也是可以实现的。