Size: a a a

2021 May 24

D

Dmitriy in Qt
Собираю относительно немолодой проект на Qt5, стоит задача переноса части содержимого в DLL. Разбил аккуратно на папки, поправил CMake и...
Есть структура директорий:
root/
main.cpp
CMakeLists.txt [1]
        dll1/
         *sources*
         some_header.h
         CMakeLists.txt [2]
Сборка падает на "undeclared identifier SomeClass", который лежит в some_header.h. Но some_header.h включен везде, где требуется, и на него ругани нет!
Раньше всё содержимое dll1/ валялось в корне - и отлично собиралось
источник

D

Dmitriy in Qt
Глюки компилятора?
Как быть?
источник

D

Dmitriy in Qt
SomeClass - гуишный, с макросом Q_OBJECT
источник

D

Dmitriy in Qt
Нашёл кольцевую зависимость хедеров. Как оно собиралось - загадка...
источник

D

Dmitriy in Qt
Всё-таки есть вопрос.
Где-то в недрах живёт иерархия вида:

template <class Ty>
class WorkerBase {
   WorkerBase(Ty&) { ... }
};
...
template <class Ty, class ConcreteWorker>
class CrtpWorkerBase : public WorkerBase<Ty, ConcreteWorker> { };
...
class DLL_API Worker : public CrtpWorkerBase<SomeType, Worker>  {
Worker(SomeType& obj, args...) : MyBase(obj), ... {}
};

Попытка скомпилить в DLL (т.е. когда DLL_API раскрывается в __declspec(dllexport)) приводит к ошибке cannot convert argument 1 from Ty to const Worker& с Ty = SomeType
Я точно уверен, что нигде не копирую Worker'а - всё на unique_ptr внутри. Но причём тогда ругань на пользовательский конструктор?

Есть подозрение на неверное обращение с базовыми классами, но не совсем понимаю, как правильно...
источник

EP

Egor Pugin in Qt
попробуй ставить DLL_API на конкретные методы, конструкторы
источник

EP

Egor Pugin in Qt
у мсвц появилась эта причуда не так давно
источник

D

Dmitriy in Qt
Ругается, мол, нельзя, т.к весь класс dllexport
источник

EP

Egor Pugin in Qt
ну, а оттуда убери, соответственно
источник

IM

Ian Mcewan in Qt
Товарищи,  подскажите,  пожалуйста,  моё приложение, основным виджетов которого является QMainWindow, запускает с помощью QProcess другое приложение. Запущенное приложение захватывает фокус, то есть находится поверх основного. Мне нужно, чтобы моё приложение наоборот было выше этого стека окон. Я использовал setFocus,  setActiveWindow, но ничего не помогает.  Есть ли решение данной проблемы?
источник

T

Tamer in Qt
Такую штуку задаёшь setWindowFlags(Qt::WindowStaysOnTopHint);?
источник

IM

Ian Mcewan in Qt
не знал о такой, попробую
источник

IM

Ian Mcewan in Qt
помогло,  большое спасибо
источник

IZ

Ilia Zviagin in Qt
Это НЕ глюки компилятора, и не бага компилятора, а проблемы твоего кода.
Ищи.
источник

IZ

Ilia Zviagin in Qt
Такого не бывает
источник

D

Dmitriy in Qt
Бывает, бывает...
источник

T

Tamer in Qt
Покажи пример твоего кода
источник

TK

Timur Khasanshin in Qt
либо это происходило изза инкрементной компиляции либо где то зависимость обрывается на #ifndef xxx #include xxx enfif или #pragma once
источник

D

Dmitriy in Qt
Хы. Проприетарщина, увы
источник

D

Dmitriy in Qt
Я попробую выдрать кусок и собрать минимально воспроизводимый пример
источник