我尝试创建一个Ctrl +鼠标滚轮宏来放大和缩小应用程序中的图像视图。
目前我正在尝试使用当前代码:
new QShortcut(QKeySequence(Qt::CTRL + QWidget::wheelEvent(QWheelEvent *event)), this, SLOT(zoom()));
但是我收到错误QWheelEvent does not refer to a value
。我在头文件中包含了所有必要的内容,所以我不明白为什么我会收到错误。
在QKeySequence
内结合小部件事件是不合法的吗?如果是这样,我该如何处理这个事件?
答案 0 :(得分:1)
您不能以这种方式使用QKeySequence
。您应该重新实现wheelEvent
或使用下一个事件过滤器(例如如何在textEdit
中放大/缩小,您可以将此代码用于特殊情况):
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if(obj == ui->plainTextEdit && event->type() == QEvent::Wheel )
{
QWheelEvent *wheel = static_cast<QWheelEvent*>(event);
if( wheel->modifiers() == Qt::ControlModifier )
if(wheel->delta() > 0)
ui->plainTextEdit->zoomIn(2);
else
ui->plainTextEdit->zoomOut(2);
}
return QObject::eventFilter(obj, event);
}
主要思想:抓住轮子事件并检查Ctrl
修改器是否被按下。
要使用eventFilter
,您还应该:
protected:
bool eventFilter(QObject *obj, QEvent *event);//in header
和
qApp->installEventFilter(this);//in constructor
注意:我展示了带有事件过滤器的示例,因为它不需要子类化,它不是更好或其他东西,使用类似的代码重新实现wheelEvent
并且您将获得完全相同的结果。