Qt4, прямое назначение QPainterPath не работает (неразрешенный внешний) - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь сделать это (directDrawingPainterPath является членом класса типа QPainterPath):

directDrawingPainterPath = QPainterPath(point);

Однако при компиляции программы в visual studio появляется следующая ошибка:

1> ScribbleWidget.obj: ошибка LNK2019: неразрешенный внешний символ "__declspec (dllimport) public: class QPainterPath & _ cdecl QPainterPath :: operator = (class QPainterPath &&) " ( _imp _ ?? 4QPainterPath @@ QEAAAEAV0 @ $$ QEAV0 @@ Z) ссылка на функцию "protected: virtual void __cdecl ScribbleWidget :: mousePressEvent (класс QMouseEvent *) " (? MousePressEvent @ ScribbleWidget @@ MEAAXPEAVQMouseEvent @@@ Z) * ​​1009 *

Когда я переписываю это так:

QPainterPath tmp(point);
directDrawingPainterPath = tmp;

Тогда это работает. Это также происходит для других заданий:

Это работает:

QString tmp = att.value().toString();
name = tmp;

Это не:

name = att.value().toString();

Кто-нибудь знает, в чем может быть проблема?

Обновление

Я только что нашел решение: проблема заключалась в том, что я пытался связать с QT, который был скомпилирован с VS2008, в то время как я скомпилировал проект с VS2010.

Использование QT, также скомпилированного с VS2010, заставляет все работать ...

Ответы [ 3 ]

1 голос
/ 14 февраля 2012

похоже, что вы выполняете компиляцию в режиме C ++ 11 из-за ошибки: QPainterPath :: operator = (class QPainterPath &&) это 'ссылка на значение', которую Qt еще не реализовал.Это означает, что вы возвращаете временное значение из метода или функции и присваиваете это значение переменной.

Когда вы сохраняете свое значение в переменной tmp (QPainterPath tmp (point); rectDrawingPainterPath = tmp;)Вы используете обычный метод operator =, поэтому он работает.

попробуйте отключить C ++ 0x в Visual Studio, не могу с этим помочь, поскольку я никогда не использовал его.:)

0 голосов
/ 28 ноября 2012

Я только что нашел решение: проблема заключалась в том, что я пытался связать с QT, который был скомпилирован с VS2008, а я скомпилировал проект с VS2010.

Использование QT, который также скомпилирован с VS2010, делает всеработа ...

0 голосов
/ 14 февраля 2012

Есть ли в вашем файле проекта следующее для сборок выпуска и отладки?

LIBS += $$quote(PathtoQtLib/NameofQtLib.lib)

где PathtoQtLib - это что-то вроде C: \ Qt \ 4.8.0 \ lib, а NameofQtLib -QtGui4.lib.

Если вы не используете файл проекта, правильно ли настроены библиотеки, на которые вы ссылаетесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...