Название: Qwt myPlot Отправлено: finka от Октябрь 04, 2007, 13:55 Я установила Qwt в варианте debug/release, но debug вариант у меня не работает. С грехом пополам работает release, если qwt5.dll засунуть в ту же директорию, что и проект, и если еще создать .pri файл следующего содержания
Код: # -*- mode: sh -*- ################################################ и этот файл подключить в .pro файле. Извращение какое-то, но иначе не получилось. Но вопрос даже не в этом, а вот в чем. Я создаю Plot, потомок от QwtPlot, при следующей конструкции Plot * plot = new Plot(); программа вылетает (так как у меня работает только debig вариант qwt, конкретную строчку найти не могу, из конструктора программа выходит и даже успевает вывести следующее за этой строчкой сообщение). Конструктор у Plot такой: Код: Plot::Plot():QwtPlot(){все закомментировано нафиг} Код: Plot::Plot(){все закомментировано нафиг} Причем объявление без указателя, то есть Plot plot работает, но так plot становится локальной переменной и удаляется при выходе из функции, чего мне совершенно не нужно. Да, и еще QwtPlot * plot = new QwtPlot() работает, график рисуется, и все там нормально работает. Название: Re: Qwt myPlot Отправлено: yanchick от Октябрь 04, 2007, 15:42 По поводу вылета проги, у меня подобный геморр был при динамической линковки qwt, после перехода на статическую линковку косяк исчез.
Название: Re: Qwt myPlot Отправлено: alex12 от Октябрь 04, 2007, 16:37 Код: Plot * plot = new Plot(); Нужно: Код: Plot * plot; Код: plot = new Plot(); Еще про .pri: Странно, что он такой сложный. У меня все получилось гораздо проще. Если интересно я напишу подробности. Название: Re: Qwt myPlot Отправлено: finka от Октябрь 04, 2007, 17:17 alex12 , при выходе из функции удалается указатель, а сам объект - нет. Предложенный вариант с переменной класса работает так же, как и мой - программа вылетает сразу после вызова конструктора. Интересно:)
Название: Re: Qwt myPlot Отправлено: alex12 от Октябрь 04, 2007, 17:52 А Plot сделан такой конструкцией ?
Код: class Plot : public QwtPlot Код: Plot::Plot(QWidget *parent ) Попробуй посмотреть и пособирать примеры из Qwt. Может это сбой компилятора/линкера? Иногда помограет полная пересборка проекта make clean && make Название: Re: Qwt myPlot Отправлено: ритт от Октябрь 04, 2007, 18:41 посмею предположить, что сборка под виндой с мингвом
была такая же проблема при наследовании классов iiSystem VB решается 1.статической компоновкой; 2.указанием импорта/экспорта для класса-родителя и т.д. Название: Re: Qwt myPlot Отправлено: finka от Октябрь 04, 2007, 18:45 alex12 , да, конструкция такая.
Qt4.3.1-VS2005 Название: Re: Qwt myPlot Отправлено: alex12 от Октябрь 04, 2007, 19:08 А примеры из Qwt нормально собираются?
Там, например, "bode" сделан также. Насчет динамической/статической сборки: у меня 4.3.X + MinGW + динамическая Qwt и все OK. Единственное, я для упрощения Qwt5.dll кидаю в QTDIR/bin, а Qwt5.a кидаю в QTDIR/lib. Кроме этого в QTDIR/include создаю Qwt и копирую туда *.h от Qwt. После этого в .pro нудно добавить только: Код: INCLUDEPATH +=$$[QT_INSTALL_PREFIX]/include/Qwt Название: Re: Qwt myPlot Отправлено: SLiDER от Октябрь 04, 2007, 19:33 При работе с Qwt важно линковать debug/release сборку библиотеки к debug/release сборке вашей программы соответственно, иначе вылетов не избежать. Я не знаю как там сейчас, а когда я последний раз собирал Qwt, в pro-файле небыло правил сборки для debug и release одновременно, я их сам дописывал, чтобы собирались сразу обе версии и чтобы debug-версия была с буковкой d на конце, в такой ситуации точно не запутаешся. 8)
Название: Re: Qwt myPlot Отправлено: alex12 от Октябрь 04, 2007, 19:54 Кстати, правда все дело может быть в debug/release. Я debug'ом-то никогда не пользуюсь... ;)
Название: Re: Qwt myPlot Отправлено: ритт от Октябрь 04, 2007, 21:31 Единственное, я для упрощения Qwt5.dll кидаю в QTDIR/bin, а Qwt5.a кидаю в QTDIR/lib. Кроме этого в QTDIR/include создаю Qwt и копирую туда *.h от Qwt. После этого в .pro нудно добавить только: Код: INCLUDEPATH +=$$[QT_INSTALL_PREFIX]/include/Qwt ещё лучше/проще набить фичу и в .pro: Код: CONFIGURE *= qwt Название: Re: Qwt myPlot Отправлено: finka от Октябрь 05, 2007, 13:05 А подскажите, как сделать компоновку статической ::)
Название: Re: Qwt myPlot Отправлено: finka от Октябрь 05, 2007, 13:08 Еще один умный вопрос:
xep , что подразумевается под указанием импорта/экспорта класса-родителя и тд? Название: Re: Qwt myPlot Отправлено: ритт от Октябрь 05, 2007, 17:17 Код: #include <QtGlobal> примерно так. с вб помогло в своё время (но не факт, что проблема была в этом :)) Название: Re: Qwt myPlot Отправлено: KADABRA от Октябрь 05, 2007, 21:26 Как раз недавно использовал qwt, соответственно и собирал.
Что примечательного заметил - то что собирается только релиз версии длл-ек и либ. Чтобы собрать дебаг версии приходится руками править мейкфайл. Название: Re: Qwt myPlot Отправлено: SLiDER от Октябрь 05, 2007, 22:17 Как раз недавно использовал qwt, соответственно и собирал. Что примечательного заметил - то что собирается только релиз версии длл-ек и либ. Чтобы собрать дебаг версии приходится руками править мейкфайл. Зачем makefile-то править, когда проще pro-файл подправить? Добавить в него Код: CONFIG += debug_and_release Код: CONFIG(debug, debug|release) { Название: Re: Qwt myPlot Отправлено: KADABRA от Октябрь 06, 2007, 18:36 чтобы названия release-версии от debug-версии отличались. Ибудет вам счастие великое. ;) Ну, вот это я как раз в мейкфайле правил :)Название: Re: Qwt myPlot Отправлено: finka от Октябрь 10, 2007, 18:40 Я созрела для того, чтобы переустановить qwt в debug_and_release варианте. Последовательность моих действий:
добавила в qwt.pro строчку: Код: CONFIG += debug_and_release CONFIG(debug, debug|release) { unix: TARGET = $$join(TARGET,,,_debug) else: TARGET = $$join(TARGET,,d) } далее Код: qmake qwt.pro Почему у меня не собрались release версии примеров? Может я опять как-то не так собрала qwt??? Название: Re: Qwt myPlot Отправлено: finka от Октябрь 10, 2007, 18:53 В vs собрала release версию примеров radio и bode. экзешники создаются но не запускаются:
Код: Debug Error! Название: Re: Qwt myPlot Отправлено: SLiDER от Октябрь 10, 2007, 19:53 Не, не так.
1. В файле qwtconfig.pri заменяете строчку Код: CONFIG += release # release/debug на строчку Код: CONFIG += debug_and_release # release/debug 2. В файл src\src.pro добавляете следующий код Код: CONFIG(debug, debug|release) { например, сразу после строчки Код: DESTDIR = ../lib 3. Собираете все это, и получаете полный комплект dll и lib файлов debug (с постфиксом d) и release версий. 4. Пишите хорошие и красивые программы. :) Название: Re: Qwt myPlot Отправлено: ритт от Октябрь 10, 2007, 20:15 только что пересобрал либу, проверил все примеры - ни разу ни одного даже ворнинга
если и с использованием подсказки выше победить не удастся, переходите на гцц :) Название: Re: Qwt myPlot Отправлено: Tonal от Октябрь 10, 2007, 20:38 Очевидно не совпадают настройки рантаймов статика/динамика одно/много поточность.
Название: Re: Qwt myPlot Отправлено: finka от Октябрь 11, 2007, 11:11 SLiDER ,
1) у меня так и было 2) исправила 3) Код: qmake qwt.pro В папке lib присутствуют только dqwt5.lib (.dll), а release версий qwt5 нет совсем:( ЗЫ: и еще собирается с кучей ворнингов типа "... no suitable definition provided for explicit template instantiation request with [ T = qreal]" Название: Re: Qwt myPlot Отправлено: finka от Октябрь 11, 2007, 11:41 Да, и еще - если просто += release, то release-версия собирается.
Название: Re: Qwt myPlot Отправлено: SLiDER от Октябрь 11, 2007, 18:57 SLiDER , 1) у меня так и было 2) исправила 3) Код: qmake qwt.pro В папке lib присутствуют только dqwt5.lib (.dll), а release версий qwt5 нет совсем:( ЗЫ: и еще собирается с кучей ворнингов типа "... no suitable definition provided for explicit template instantiation request with [ T = qreal]" И всетаки у вас было не совсем так (вы редактировали не src.pro). Похоже что вы в qwtconfig.pri раскоментировали строчку для сборки примеров, так вот линкер не может найти release-версию библиотеки, так как она еще не собрана, судя по всему. Наберите вместо nmake, nmake Release. Кстати вот это -> dqwt5.lib опечатка или библиотека так назвалась при сборке? Вообщето должно было быть qwt5d.lib. ??? З.Ы. На эти ворнинги не обращайте внимания, это компилятор Visual Studio не очень хорошо понимает С++. ;D Шутка. Название: Re: Qwt myPlot Отправлено: finka от Октябрь 12, 2007, 15:02 Не опечатка, так и назвалась.
Название: Re: Qwt myPlot Отправлено: SLiDER от Октябрь 12, 2007, 19:23 Не опечатка, так и назвалась. Эмммм, попробуйте вот здесь Код: else: TARGET = $$join(TARGET,,d) запятую добавить, вот так Код: else: TARGET = $$join(TARGET,,,d) |