Qt: не могу установить режим перетаскивания

Я застрял на этом некоторое время, я пытаюсь установить режим перетаскивания моего QGraphicsView на ScrollHandDrag, чтобы я мог создать функцию панорамирования в своем приложении.

Однако всякий раз, когда я пытаюсь установить режим перетаскивания, Qt всегда жалуется, что DragMode является необъявленным идентификатором.

Я также стремлюсь создать функциональность кадрирования (полагаю, для этого я буду использовать перетаскивание резинкой?), мне просто интересно, почему я не могу установить режим перетаскивания в представлении.

void MainWindow::on_btnCrop_clicked()
{
    cropping = true;
    QApplication::setOverrideCursor(Qt::CrossCursor);

    // Stuck with this...
    ui->imageView->setDragMode(ScrollHandDrag);
}

^ Я пробовал несколько других обходных путей, но пока не нашел никакого решения, буду очень признателен за любые предложения.


person Alex    schedule 01.11.2014    source источник
comment
Вы проверили свои включения, верно?   -  person Nicolas Holthaus    schedule 01.11.2014


Ответы (1)


Это не QGraphicsView конкретная проблема, а общий C++. Ваша проблема находится в этой строке:

ui->imageView->setDragMode(ScrollHandDrag);

Проблема в том, что вы предполагаете, что у вас есть видимость значения ScrollHandDrag, в то время как оно появляется внутри области QGraphicsView. Поэтому, поскольку вы пытаетесь получить доступ к этому значению в своем MainWindow, вам нужно будет явно добавить область действия следующим образом:

ui->imageView->setDragMode(QGraphicsView::ScrollHandDrag);

Обратите внимание, что даже документация определяет область для этой константы:

QGraphicsView::ScrollHandDrag 1 Курсор изменится на указывающую руку, и перетаскивание мыши будет прокручивать полосы прокрутки. Этот режим работает как в интерактивном, так и в неинтерактивном режиме.

Вот мой минимальный строительный код:

#include <QGraphicsView>

int main()
{
    QGraphicsView graphicsView;
    graphicsView.setDragMode(QGraphicsView::ScrollHandDrag);
    return 0;
}

main.pro

TEMPLATE = app
TARGET = main
QT += widgets
SOURCES += main.cpp

Построить и запустить

qmake && make
person lpapp    schedule 01.11.2014
comment
Я попробовал предложенное выше решение, но до сих пор не смог найти ссылку на ScrollHandDrag, какие-нибудь идеи? У меня настроены включения - person Alex; 02.11.2014
comment
@Alex: Без примера, воспроизводящего проблему, сказать невозможно. - person lpapp; 02.11.2014
comment
Это, конечно, очень странно, я портировал тот же код на Windows, и он отлично компилируется. Может проблема в Йосемити? но я не понимаю почему, так как он все еще использует тот же компилятор и компоновщик:/ - person Alex; 02.11.2014