Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Ced от Май 12, 2017, 11:10



Название: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 11:10
Добрый день. Для рисования графиков решил воспользоваться библиотекой Qwt-6.1.3.
Установил по инструкции. Заголовочные файлы компилятором видятся. Сборка проходит нормально.
Есть две проблемы:
1. Редактор форм не видит виджетов QWT;
2. Запущенная программа завешается, не найдя DLL. Какой DLL - не сообщает. Падает раньше, чем начинает работать дебагер.

В составе библиотеки нашел всего 3 DLL:
qwt_designer_plugin.dll
qwtd.dll
qwt.dll

Засунул их все по следующим путям:
C:\Qt\5.x\mingw53_32\bin
C:\Qt\5.x\mingw53_32\lib
C:\Qt\5.x\mingw53_32\plugins\designer
C:\Qt\Tools\QtCreator\bin\plugins\designer
C:\Qt\Tools\QtCreator\lib

Что не так?




Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Пантер от Май 12, 2017, 11:15
http://dependencywalker.com/

Вот этим можешь посмотреть зависимости.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: __Heaven__ от Май 12, 2017, 11:54
debug и release не перепутаны при подключении?
qtdesigner собран с помощью msvc. Поэтому не подгружается инструмент редактора.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: kuzulis от Май 12, 2017, 12:01
Цитировать
1. Редактор форм не видит виджетов QWT;

Да и не нужно это, ну правда.

Цитировать
Засунул их все по следующим путям:

C:\Qt\5.x\mingw53_32\bin
C:\Qt\5.x\mingw53_32\lib
C:\Qt\5.x\mingw53_32\plugins\designer
C:\Qt\Tools\QtCreator\bin\plugins\designer
C:\Qt\Tools\QtCreator\lib

Не надо так.

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

Но обычно самый простой путь - это в настройках проекта в QtC добавить путь для PATH к директории с Qwt в
"Projects->Run->Run Environment" для твоей запускаемой екзешки. Тогда твоя программулина будет запускаться из QtC
и отлаживаться.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: __Heaven__ от Май 12, 2017, 12:35
Цитировать
1. Редактор форм не видит виджетов QWT;

Да и не нужно это, ну правда.
Немного заморочно инструмент настраивается, но пользу имеет при просмотре ui файлов. Помню были разночтения в отображении QWidget и QwtPlot, с политикой размеров по умолчанию, вроде, было связано. Но, по правде, всё это мелочи.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 12:46
http://dependencywalker.com/

Вот этим можешь посмотреть зависимости.

Посмотрел. Одну dll добавил. На один шаг продвинулся. Но дальше он стал ругаться на dll из system32, которые там есть.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Igors от Май 12, 2017, 13:00
2. Запущенная программа завешается, не найдя DLL. Какой DLL - не сообщает. Падает раньше, чем начинает работать дебагер.
А что пишет? Может "invalid side-by-side"? Так бывает если либа собрана с одними runtime(ами) а приложение с другими


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 13:22
Цитировать
Но обычно самый простой путь - это в настройках проекта в QtC добавить путь для PATH к директории с Qwt в
"Projects->Run->Run Environment" для твоей запускаемой екзешки. Тогда твоя программулина будет запускаться из QtC
и отлаживаться.

Там все добавлено


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 13:25

Немного заморочно инструмент настраивается, но пользу имеет при просмотре ui файлов. Помню были разночтения в отображении QWidget и QwtPlot, с политикой размеров по умолчанию, вроде, было связано. Но, по правде, всё это мелочи.

Ну эту беду я смогу пережить. Вообще предпочитаю все отображение писать текстом. Ui не использую. А вот с DLL пока затык.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: __Heaven__ от Май 12, 2017, 13:46
взглянуть бы на pro и на лог сборки


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 14:16
С помощью вот этой примочки
 depends
Выяснил, что проблема в нескольких DLL из windows/system32/downlevel
Беда в том, что все эти DLL там есть и проекты без QWT таких проблем не создают.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 14:17
взглянуть бы на pro и на лог сборки
Код:
#-------------------------------------------------
#
# Project created by QtCreator 2017-05-12T08:52:18
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = qwt_test
TEMPLATE = app

INCLUDEPATH += C:\Qwt-6.1.3\include

LIBS += -LC:\Qwt-6.1.3\lib -lqwt

# The following define makes your compiler emit warnings if you use
# any feature of Qt which as been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

Это проект. Сборка проходит чисто, без единого предупреждения.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 14:20
взглянуть бы на pro и на лог сборки

Вот консоль сборки
Код:
14:18:42: Выполняются этапы для проекта qwt_test...
14:18:42: Настройки не изменились, этап qmake пропускается.
14:18:43: Запускается: «C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe»
C:\Qt\5.8\mingw53_32\bin\qmake.exe -o Makefile ..\qwt_test\qwt_test.pro -spec win32-g++ "CONFIG+=debug" "CONFIG+=qml_debug"
C:/Qt/Tools/mingw530_32/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory 'E:/Programs/QWT_test/build-qwt_test-Desktop_Qt_5_8_0_MinGW_32bit-Debug'
mingw32-make[1]: Nothing to be done for 'first'.
mingw32-make[1]: Leaving directory 'E:/Programs/QWT_test/build-qwt_test-Desktop_Qt_5_8_0_MinGW_32bit-Debug'
14:18:44: Процесс «C:\Qt\Tools\mingw530_32\bin\mingw32-make.exe» завершился успешно.
14:18:44: Прошло времени: 00:02.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: __Heaven__ от Май 12, 2017, 14:21
-lqwtd для дебага


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 14:35
-lqwtd для дебага

Но это же не должно так влиять?


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: __Heaven__ от Май 12, 2017, 15:39
Должно


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 17:40
Создал проект заново.
Теперь новая напасть.
Код:
#include <QMainWindow>

#include <qwt_plot_canvas.h>
#include <qwt_legend.h>
#include <qwt_plot_grid.h>
#include <qwt_plot_curve.h>
#include <qwt_symbol.h>


class MainWindow : public QMainWindow
{
    Q_OBJECT
private:
    QwtPlot *myPlot;
    QwtLegend *leg;
    QwtPlotGrid *grid;
    QwtPlotCurve *curv1,*curv2;
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

#include <QMainWindow>

#include <qwt_plot_canvas.h>
#include <qwt_legend.h>
#include <qwt_plot_grid.h>
#include <qwt_plot_curve.h>
#include <qwt_symbol.h>


class MainWindow : public QMainWindow
{
    Q_OBJECT
private:
    QwtPlot *myPlot;
    QwtLegend *leg;
    QwtPlotGrid *grid;
    QwtPlotCurve *curv1,*curv2;
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};

Ругается на QwtPlot
Цитировать
E:\Programs\QWT_test\untitled\mainwindow.cpp:7: ошибка: invalid use of incomplete type 'class QwtPlot'
         myPlot = new QwtPlot (this);
                                   ^




Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 17:44
2. Запущенная программа завешается, не найдя DLL. Какой DLL - не сообщает. Падает раньше, чем начинает работать дебагер.
А что пишет? Может "invalid side-by-side"? Так бывает если либа собрана с одними runtime(ами) а приложение с другими

Не, такого не писал.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: __Heaven__ от Май 12, 2017, 20:46
Это означает, что класс просто предварительно объявлен без предоставления его тела.
Include qwt_plot.h решение


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 12, 2017, 22:05
Это означает, что класс просто предварительно объявлен без предоставления его тела.
Include qwt_plot.h решение

Не помогло. Результат тот же.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 13, 2017, 10:52
Кажется я приблизился к решению, но без подсказки не получится.
Исправил в проекте строку LIBS. Написал так:
Код:
LIBS+= C:\Qwt-6.1.3\lib
По этому пути лежат 4 файла:
Цитировать
libqwt.a
libqwtd.a
qwt.dll
qwtd.dll

Сообщение компилятора такое
Цитировать
:-1: ошибка: cannot find C:\Qwt-6.1.3\lib: Permission denied

От чего то Qt не имеет доступа к файлам QWT.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 13, 2017, 11:53
Ну наконец разобрался. Переписал в проекте инструкцию LIBS так
Код:
LIBS+= "C:/Qt/Qwt-6.1.3/lib/qwt.dll"

Теперь компилится и запускается.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 13, 2017, 14:26
Короче, беда с этой библиотекой. После того. как заставил компилиться, повторилась ситуация, с которой и начал. Ругается на отсутствующие DLL. При помощи depends выявил недостачу в SYSTEM32 28 штук различных DLL. Все их скачал http://ru.dllworld.org вот с этого сайта.
Теперь ругается на отсутствующие вызовы в userenv.dll. Этот тоже скачал, но пока не заменил.

Хочу спросить у сообщества, а эта QWT под Виндой у кого-нибудь работает? Какая версия Винды, какая версия библиотеки, какая версия Qt?
Что-то мне кажется, не слишком эта штука кроссплатформенная. Возникает ощущение, что воюю дубиной с танком. Может кто посоветует что-то другое для построения графиков?


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 13, 2017, 15:17
Выявил, что вызов, который не поддерживается USERENV.DLL, содержится в Qt в файле USERENV.H
За сим мучить QWT заканчиваю. Считаю, что игра не стоит свеч. Пробую QCustomPlot.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 13, 2017, 15:29
Ну вот. 10 минут трудов и есть график. Всем советую. А QWT - забыть, как страшный сон:)


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: vbv от Май 13, 2017, 16:20
Ну не знаю.
У меня, под linux, все нормально собирается и работает.
Может зверек ("QWT") под форточками не жизнеспособен.
Еще раз повторюсь под линухами - на ура.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 13, 2017, 16:46
Ну не знаю.
У меня, под linux, все нормально собирается и работает.
Может зверек ("QWT") под форточками не жизнеспособен.
Еще раз повторюсь под линухами - на ура.

Да я так и подумал, что тут дело в совместимости версий. Может взял бы Qt младше 5.8, и у меня бы проблем не было. Явно что то не срастается между userenv.dll в текущей версии масдая и ожиданиями Qt userenv.h
Но разбираться с этим надоело. Заказчик хочет, чтобы продукт работал под масдаем. QCustomPlot работает без проблем. А на QWT я убил два дня трудов.
QCustomPlot в открытом коде и меня все устраивает.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: __Heaven__ от Май 17, 2017, 22:56
Да всё способно. На 5.7.1 проверял.
Либу правильнее прописывать
LIBS+= -LC:/Qt/Qwt-6.1.3/lib -lqwt
если дебаг, то -lqwtd.
Делов то...
Как автоматизировать дебаг/релиз см. здесь http://stackoverflow.com/questions/1130106/linking-with-a-debug-release-lib-with-qmake-qt-creator


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Racheengel от Май 18, 2017, 11:41
Никогда особых проблем с QWT под вендой не было... ЧЯДНТ?
Важно только собрать QWT с той же версией QT.
И да, лучше статически. Тогда точно уж взлэтыт.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 18, 2017, 13:19
И да, лучше статически. Тогда точно уж взлэтыт.

Вот это важно. Где вы были неделю назад?:) Я уже на на QCustomPlot все написал и оттестировал:)


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: __Heaven__ от Май 18, 2017, 21:09
Статически или динамически не влияет на успех линковки, ИМХО


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 20, 2017, 15:45
Статически или динамически не влияет на успех линковки, ИМХО

У меня все проблемы были связаны с отсутствием в windows/system32 различных DLL файлов. Я вынужден был их туда добавить 28 штук. И в итоге заткнулся на том, что очередной DLL файл не содержал нужного вызова, а заменить его мне не разрешила ОС. Я конечно знаю способ, как заменять такие файлы, но вся эта возня мне порядком надоела.
Если линковка была бы статической. библиотека QWT содержала бы в себе все необходимое и добавлять в SYSTEN32 ничего бы не пришлось.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: __Heaven__ от Май 20, 2017, 22:26
Обычно библиотеки вне дистрибутивов не в system32 добавляются, а в папку с программой, имхо. У меня могут быть по сути 4 версии qwt. Скомпиленная mingw, скомпиленная msvc, а ещё она может быть скомпилена с использованием qt5 или qt4


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Ced от Май 21, 2017, 10:49
Обычно библиотеки вне дистрибутивов не в system32 добавляются, а в папку с программой, имхо. У меня могут быть по сути 4 версии qwt. Скомпиленная mingw, скомпиленная msvc, а ещё она может быть скомпилена с использованием qt5 или qt4

И статическая сборка автоматом решила бы эту проблему. Каждая библиотека содержала бы все, что нужно для ее использования и в SYSTEM32 никто бы не лез.


Название: Re: Прошу помощи по настройке для работы с QWT
Отправлено: Igors от Май 21, 2017, 10:59
И статическая сборка автоматом решила бы эту проблему. Каждая библиотека содержала бы все, что нужно для ее использования и в SYSTEM32 никто бы не лез.
Именно этим статическая сборка и привлекает новичков, типа "собрал один раз - и меня ничто не волнует!". Но потом выясняется что сборку придется повторять и повторять при каждом изменении базовых либов (хотя бы того же Qt). Рано или поздно все скатываются в "динамику"

У меня все проблемы были связаны с отсутствием в windows/system32 различных DLL файлов. Я вынужден был их туда добавить 28 штук.
Что-то явно "не то", ну даже если все добавите - что делать на машине заказчика? С QWT не работал, но попробовал бы "вцепиться" в первую либу что пришлось добавить и разобраться почему. Если не указано в "dependencies" - то ничего добавлять не нужно. С либой обычно идут примеры - они проходят?