Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.07.2023, 03:38   #1
Rait-spider
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 15
По умолчанию Ошибка Undefined Reference в Qt Creator

Добрый день, уважаемые профессионалы!

Я начал работать со средой разработки Qt Creator. Выдаётся ошибка Undefined Reference to QuiLoader::QUiLoader(QObject*). Привожу свой код, большую часть которого я набирал из книжки по библиотеке Qt для теста. Но я создал проект динамической библиотеки(так нужно для текущего проекта).

kbm_bp_gui.h
Код:
#ifndef KBM_BP_GUI_H
#define KBM_BP_GUI_H
#include "KBM_BP_GUI_global.h"
#include <QtWidgets>
#include<QPushButton>
#include <QtUiTools/QUiLoader>

class KBM_BP_GUI : public QWidget
{
    Q_OBJECT
private:
    QPushButton* btn;
public:
    KBM_BP_GUI(QWidget* pwgt = 0) : QWidget(pwgt)
    {
        QUiLoader* puil = new QUiLoader(this);  //эта строка и не нравится компилятору
        QFile file("widget.ui");
        QWidget* pwgtForm = puil->load(&file);
        if(pwgtForm)
        {
            resize(pwgtForm->size());
            btn = pwgtForm->findChild<QPushButton*>("pushButton");
            connect(btn, SIGNAL(clicked()), SLOT(slotPush()));
        }
    }
public slots:
    void slotPush()
    {
    }
};

void KBM_BP_GUI_EXPORT M();
#endif // KBM_BP_GUI_H

KBM_BP_GUI_global.h
Код:
#ifndef KBM_BP_GUI_GLOBAL_H
#define KBM_BP_GUI_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(KBM_BP_GUI_LIBRARY)
#  define KBM_BP_GUI_EXPORT Q_DECL_EXPORT
#else
#  define KBM_BP_GUI_EXPORT Q_DECL_IMPORT
#endif

#endif // KBM_BP_GUI_GLOBAL_H

kbm_bp_gui.cpp
Код:
#include "kbm_bp_gui.h"

void M() {
    QWidget* form = new QWidget;
    KBM_BP_GUI* KBG = new KBM_BP_GUI(form);
    KBG->show();
}
Файл .pro
Код:
QT += widgets

TEMPLATE = lib
DEFINES += KBM_BP_GUI_LIBRARY

CONFIG += c++11

# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked 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 it uses 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 += \
    kbm_bp_gui.cpp

HEADERS += \
    KBM_BP_GUI_global.h \
    kbm_bp_gui.h
#INCLUDEPATH += D:\Qt\Qt5.14.2\5.14.2\mingw73_32\include
RESOURCES = resource.qrc
# Default rules for deployment.
unix {
    target.path = /usr/lib
}
!isEmpty(target.path): INSTALLS += target
Подробный вывод:
release/kbm_bp_gui.o:kbm_bp_gui.cpp.text+ 0x77): undefined reference to `QUiLoader::QUiLoader(QObject*)'
release/kbm_bp_gui.o:kbm_bp_gui.cpp.text+ 0xdf): undefined reference to `QUiLoader::load(QIODevice*, QWidget*)'
collect2.exe: error: ld returned 1 exit status
mingw32-make[1]: *** [Makefile.Release:72: release/KBM_BP_GUI.dll] Error 1
mingw32-make[1]: Leaving directory 'D:/Proj_WorkFlow/build-KBM_BP_GUI-Desktop_Qt_5_14_2_MinGW_32_bit-Release'
mingw32-make: *** [Makefile:45: release] Error 2
17:33:19: Процесс «D:\Qt\Qt5.14.2\Tools\mingw730_32\b in\mingw32-make.exe» завершился с кодом 2.
Ошибка при сборке/развёртывании проекта KBM_BP_GUI (комплект: Desktop Qt 5.14.2 MinGW 32-bit)
Во время выполнения этапа «Сборка»


Собственно идея в том, что созданную в обычном проекте форму ui я пытаюсь с помощью QUiLoader подгрузить в свою DLL с целью последующего вывода на экран. Но выдаётся эта ошибка.
Может ли быть так, что это связано как-то с самой строкой заголовка #include <QtUiTools/QUiLoader>? Скрин содержимого каталога прикладываю. В книге по Qt 5 заголовок такого плана #include<QUiTools>, но в моём случае есть только QtUiTools/QUiLoader. Менял на QtUiTools/quiloader.h, но результат тот же.

Дистрибутив уже содержал внутри себя среду, компилятор и библиотеку Qt. Операционная система Windows 10. В чём может быть проблема? Заранее спасибо.
Изображения
Тип файла: jpg Каталог.jpg (45.0 Кб, 2 просмотров)
С++ - сила

Последний раз редактировалось Rait-spider; 23.07.2023 в 03:47. Причина: Заменил неудачный приложенный скриншот другим
Rait-spider вне форума Ответить с цитированием
Старый 23.07.2023, 06:50   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
QT += uitools
В документации ж написано...
p51x вне форума Ответить с цитированием
Старый 24.07.2023, 00:01   #3
Rait-spider
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 15
По умолчанию

Большое спасибо! И ещё такой вопрос. А есть ли в Qt аналог #import? Допустим, мне нужно использовать библиотеку типов из dll-библиотеки. Как мне её подключить?
С++ - сила
Rait-spider вне форума Ответить с цитированием
Старый 24.07.2023, 07:23   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

#import это Microsoft специфическая штука. Если вам надо компилировать другим компилятором, то создайте простой проект в Visual C++, импортните либу, соберите и возьмите оттуда сгенерированные для либы файлы.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка undefined reference to NDrago Общие вопросы C/C++ 1 08.03.2018 20:55
Ошибка undefined reference to 'WinMain' Palmolivka Общие вопросы C/C++ 2 09.01.2018 15:01
24|undefined reference to `__imp_SaveDC' taras-proger Общие вопросы C/C++ 10 10.09.2015 09:04
[Linker error] undefined reference Lohmatiyy Общие вопросы C/C++ 5 03.08.2012 14:50
неопределенное обращение (undefined reference) rUs_LAN Win Api 1 28.03.2010 12:35