Qt:QWheelEvent不引用值

时间:2014-10-31 14:31:24

标签: qt

我尝试创建一个Ctrl +鼠标滚轮宏来放大和缩小应用程序中的图像视图。

目前我正在尝试使用当前代码:

new QShortcut(QKeySequence(Qt::CTRL + QWidget::wheelEvent(QWheelEvent *event)), this, SLOT(zoom()));

但是我收到错误QWheelEvent does not refer to a value。我在头文件中包含了所有必要的内容,所以我不明白为什么我会收到错误。

QKeySequence内结合小部件事件是不合法的吗?如果是这样,我该如何处理这个事件?

1 个答案:

答案 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并且您将获得完全相同的结果。