Russian Qt Forum
Май 08, 2024, 04:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qwt myPlot  (Прочитано 15877 раз)
finka
Гость
« : Октябрь 04, 2007, 13:55 »

Я установила Qwt в варианте debug/release, но debug вариант у меня не работает. С грехом пополам работает release, если qwt5.dll засунуть в ту же директорию, что и проект, и если еще создать .pri файл следующего содержания
Код:
# -*- mode: sh -*- ################################################
# Qwt Widget Library
# Copyright (C) 1997   Josef Wilgen
# Copyright (C) 2002   Uwe Rathmann
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the Qwt License, Version 1.0
###################################################################

include( ../../../../../Qt/qwt-5.0.2/qwtconfig.pri )

TEMPLATE     = app

MOC_DIR      = moc
OBJECTS_DIR  = obj
INCLUDEPATH += ../../../../../Qt/qwt-5.0.2/src
DEPENDPATH  += ../../../../../Qt/qwt-5.0.2/src

unix:LIBS        += -L../../lib -lqwt

win32:QwtDll {
    DEFINES    += QT_DLL QWT_DLL
}

contains(CONFIG, QwtDll) {
    win32-msvc:LIBS  += ../../../../../Qt/qwt-5.0.2/lib/qwt5.lib
    win32-msvc.net:LIBS  += ../../../../../Qt/qwt-5.0.2/lib/qwt5.lib
    win32-msvc2005:LIBS += ../../../../../Qt/qwt-5.0.2/lib/qwt5.lib
    win32-g++:LIBS   += -L../../../../../Qt/qwt-5.0.2/lib -lqwt
} else {
    win32-msvc:LIBS  += ../../../../../Qt/qwt-5.0.2/lib/qwt.lib
    win32-msvc.net:LIBS  += ../../../../../Qt/qwt-5.0.2/lib/qwt.lib
    win32-msvc2005:LIBS += ../../../../../Qt/qwt-5.0.2/lib/qwt.lib
    win32-g++:LIBS   += -L../../../../../Qt/qwt-5.0.2/lib -lqwt
}

и этот файл подключить в .pro файле. Извращение какое-то, но иначе не получилось.
Но вопрос даже не в этом, а вот в чем. Я создаю Plot, потомок от QwtPlot, при следующей конструкции
Plot * plot = new Plot(); программа вылетает (так как у меня работает только debig вариант qwt, конкретную строчку найти не могу, из конструктора программа выходит и даже успевает вывести следующее за этой строчкой сообщение). Конструктор у Plot такой:
Код:
Plot::Plot():QwtPlot(){все закомментировано нафиг}
пробовала также такой:
Код:
Plot::Plot(){все закомментировано нафиг}
Но ничего не изменилось.
Причем объявление без указателя, то есть
Plot plot
работает, но так plot становится локальной переменной и удаляется при выходе из функции, чего мне совершенно не нужно.
Да, и еще
QwtPlot * plot = new QwtPlot() работает, график рисуется, и все там нормально работает.
Записан
yanchick
Гость
« Ответ #1 : Октябрь 04, 2007, 15:42 »

По поводу вылета проги, у меня подобный геморр был при динамической линковки qwt, после перехода на статическую линковку косяк исчез.
Записан
alex12
Гость
« Ответ #2 : Октябрь 04, 2007, 16:37 »

Код:
Plot * plot = new Plot();
В таком виде plot -- локальная переменная-указатель и удаляется при выходе из функции.

Нужно:
Код:
Plot * plot;
объявить как переменную класса, а при создании:
Код:
plot = new Plot();

Еще про .pri: Странно, что он такой сложный. У меня все получилось гораздо проще. Если интересно я напишу подробности.
Записан
finka
Гость
« Ответ #3 : Октябрь 04, 2007, 17:17 »

alex12 , при выходе из функции удалается указатель, а сам объект - нет. Предложенный вариант с переменной класса работает так же, как и мой - программа вылетает сразу после вызова конструктора. Интересно:)
Записан
alex12
Гость
« Ответ #4 : Октябрь 04, 2007, 17:52 »

А Plot сделан такой конструкцией ?
Код:
class Plot : public QwtPlot
{
  Q_OBJECT
public:
  Plot( QWidget *parent = 0 );
};
Код:
Plot::Plot(QWidget *parent )
  : QwtPlot( parent )
{
}

Попробуй посмотреть и пособирать примеры из Qwt.

Может это сбой компилятора/линкера? Иногда помограет полная пересборка проекта make clean && make
Записан
ритт
Гость
« Ответ #5 : Октябрь 04, 2007, 18:41 »

посмею предположить, что сборка под виндой с мингвом

была такая же проблема при наследовании классов iiSystem VB
решается 1.статической компоновкой; 2.указанием импорта/экспорта для класса-родителя и т.д.
Записан
finka
Гость
« Ответ #6 : Октябрь 04, 2007, 18:45 »

alex12 , да, конструкция такая.
Qt4.3.1-VS2005
Записан
alex12
Гость
« Ответ #7 : Октябрь 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
LIBS += -lqwt




Записан
SLiDER
Гость
« Ответ #8 : Октябрь 04, 2007, 19:33 »

При работе с Qwt важно линковать debug/release сборку библиотеки к debug/release сборке вашей программы соответственно, иначе вылетов не избежать. Я не знаю как там сейчас, а когда я последний раз собирал Qwt, в pro-файле небыло правил сборки для debug и release одновременно, я их сам дописывал, чтобы собирались сразу обе версии и чтобы debug-версия была с буковкой d на конце, в такой ситуации точно не запутаешся. Крутой
Записан
alex12
Гость
« Ответ #9 : Октябрь 04, 2007, 19:54 »

Кстати, правда все дело может быть в debug/release. Я debug'ом-то никогда не пользуюсь...  Подмигивающий
Записан
ритт
Гость
« Ответ #10 : Октябрь 04, 2007, 21:31 »

Единственное, я для упрощения Qwt5.dll кидаю в QTDIR/bin, а Qwt5.a кидаю в QTDIR/lib.
Кроме этого в QTDIR/include создаю Qwt и копирую туда *.h от Qwt.
После этого в .pro нудно добавить только:
Код:
INCLUDEPATH +=$$[QT_INSTALL_PREFIX]/include/Qwt
LIBS += -lqwt

ещё лучше/проще набить фичу и в .pro:
Код:
CONFIGURE *= qwt
Записан
finka
Гость
« Ответ #11 : Октябрь 05, 2007, 13:05 »

А подскажите, как сделать компоновку статической Строит глазки
Записан
finka
Гость
« Ответ #12 : Октябрь 05, 2007, 13:08 »

Еще один умный вопрос:
xep , что подразумевается под указанием импорта/экспорта класса-родителя и тд?
Записан
ритт
Гость
« Ответ #13 : Октябрь 05, 2007, 17:17 »

Код:
#include <QtGlobal>

#ifdef Q_OS_WIN
#ifdef CORELIB_BUILD
#define CUSTOM_EXPORT Q_DECL_EXPORT
#else
#define CUSTOM_EXPORT Q_DECL_IMPORT
#endif
#endif
#ifndef CUSTOM_EXPORT
#define CUSTOM_EXPORT
#endif

class CUSTOM_EXPORT SomeClass ...

примерно так.
с вб помогло в своё время (но не факт, что проблема была в этом Улыбающийся)
Записан
KADABRA
Гость
« Ответ #14 : Октябрь 05, 2007, 21:26 »

Как раз недавно использовал qwt, соответственно и собирал.
Что примечательного заметил - то что собирается только релиз версии длл-ек и либ.
Чтобы собрать дебаг версии приходится руками править мейкфайл.
« Последнее редактирование: Октябрь 05, 2007, 21:28 от KADABRA » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 20.