Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384

Не собирается проект под MSVC2015

20.11.2018, 20:39. Показов 2627. Ответов 16

Студворк — интернет-сервис помощи студентам
Всем привет!
В общем, есть вот такой небольшой пример:
conanfile.txt
Кликните здесь для просмотра всего текста

Code
1
2
3
4
5
6
7
8
9
10
11
[requires]
Qt/5.11.0@bincrafters/stable
 
[options]
Qt:qtmultimedia=True
 
[generators]
cmake 
 
[imports]
bin, *.pdb -> ./bin

CMakeLists.txt
Кликните здесь для просмотра всего текста

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
cmake_minimum_required(VERSION 3.10)
 
project(test_project)
 
set(CMAKE_CXX_FLAGS -pthread)
set(CMAKE_CXX_STANDARD 14)
 
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
 
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed
set(CMAKE_AUTOMOC ON)
# Create code from a list of Qt designer ui files
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
 
find_package(Qt5Core REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Multimedia REQUIRED)
 
add_executable(${PROJECT_NAME} main.cpp test.h test.cpp)
 
target_link_libraries(${PROJECT_NAME} Qt5::Widgets)
target_link_libraries(${PROJECT_NAME} Qt5::Core)
target_link_libraries(${PROJECT_NAME} Qt5::Multimedia)

test.h
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef TEST_H
#define TEST_H
 
#include <QObject>
#include <QTimer>
 
class Test : public QObject
{
    Q_OBJECT
public:
    explicit Test(QObject *parent = nullptr);
 
private slots:
    void timeIsOut();
 
private:
    QTimer* m_Timer;
};
 
#endif // TEST_H

test.cpp
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "test.h"
#include <chrono>
#include <QDebug>
 
Test::Test(QObject *parent) : QObject(parent)
{
    m_Timer = new QTimer();
    std::chrono::seconds sec {10};
    m_Timer->setInterval(sec);
    QObject::connect(m_Timer, &QTimer::timeout, this, &Test::timeIsOut);
    m_Timer->start();
}
 
void Test::timeIsOut()
{
    qDebug() << "Time is out";
    qDebug() << m_Timer->intervalAsDuration().count();
}

main.cpp
Кликните здесь для просмотра всего текста

C++ (Qt)
1
2
3
4
5
6
7
8
9
#include <QCoreApplication>
#include "test.h"
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    Test test;
    return a.exec();
}

Данный конфиг отлично собирается и работает под Ubuntu 18.04 GCC 7.3 Qt 5.11
Но когда я пытаюсь данный проект собрать под Windows 10 x64 MSVC2015 Qt 5.11,
то получаю несколько интересных ошибок:
Code
1
2
3
error C2664: 'void QTimer::setInterval(int)': cannot convert argument 1 from 'std::chrono::seconds' to 'int'
error C2039: 'intervalAsDuration': is not a member of 'QTimer'
error C2228: left of '.count' must have class/struct/union
Т.е. компилятор, получается, вообще не знает о методах, которые принимают и возвращают std::chrono.
При этом в документации эти методы описаны и точно существуют (setInterval и intervalAsDuration) и под Ubuntu также нормально компилируются.
Также, следует отметить, что в Visual Studio 2015 эти методы корректно отображаются, т.е. в списке методов обьека они есть,
подсвечиваются параметры и возвращаемое значение.

Кто знает как победить данную проблему? Как заставить MSVC2015 собрать этот проект?
Буду рад всем советам, ссылкам, рекомендациям!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2018, 20:39
Ответы с готовыми решениями:

Не собирается проект под линуксом
Здравствуйте!:cry::cry:Такая проблема, есть линь(МСВС). После долгих мучений все заработало, а после того, как в проект я вернула второй...

Не собирается проект Qt
Вот такая вот ошибка, что это? &quot;cl&quot; *Ґ пў«пҐвбп ў*гваҐ**Ґ© Ё«Ё ў*Ґи*Ґ© Є®¬ *¤®©, ЁбЇ®«*塞®© Їа®Ја ¬¬®© Ё«Ё Ї ЄҐв*л¬ д ©«®¬. ...

Не собирается проект
Доброй ночи. Использую VS2010(Profess) + Qt libraries 4.8.3 for Windows (VS 2010, 235 MB) + Qt Visual Studio Add-in Когда в...

16
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
20.11.2018, 21:13
Попробуй
C++
1
m_Timer->setInterval(static_cast<std::chrono::milliseconds>(sec));
0
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
20.11.2018, 21:44  [ТС]
TRam_, проблема не в этом. Суть в том, что компилятор VS2015 не знает методы, которые принимают std::chrono и пытается аргумент преобразовать в int.

Пример, который я описал в теме, всего лишь конкретная демонстрация проблемы. На самом деле есть проект в котором эта проблема возникла, к которому уже написаны тесты и переписывать все места, где методы принимают std::chrono на методы, которые принимают int не особо то хочется.

Хотелось бы понять, почему студия не хочет собирать это.

Добавлено через 53 секунды
Может, здесь есть тот, кто может затестить это на VS2017?
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
20.11.2018, 22:33
А точно используется Qt 5.11? Проверьте. Желательно, прямо из кода.
1
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
20.11.2018, 22:36  [ТС]
Croessmah, Как можно прямо из кода проверить?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
20.11.2018, 22:47
igdev, но ведь функция требует не chrono::seconds, а chrono::milliseconds, это совсем разные типы. То есть уже попробовали подставлять именно chrono::milliseconds ?

Добавлено через 5 минут
Цитата Сообщение от igdev Посмотреть сообщение
Как можно прямо из кода проверить?
Из кода не проверить. Но можно проверить из инсталляции библиотеки, запустив у неё
Bash
1
qmake -v
в папке bin

Добавлено через 29 секунд
Или
Bash
1
qmake.exe -v
если речь о винде
0
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
20.11.2018, 22:50  [ТС]
TRam_,
Цитата Сообщение от TRam_ Посмотреть сообщение
но ведь функция требует не chrono::seconds, а chrono::milliseconds, это совсем разные типы. То есть уже попробовали подставлять именно chrono::milliseconds ?
std::chrono::seconds без проблем конвертируется в std::chrono::milliseconds.
Но не обратно. Тем более на Ubuntu это код работает.
0
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
20.11.2018, 22:53  [ТС]
Версия Qt:
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
20.11.2018, 23:03
В \include\QtCore\qtimer.h эти функции подключаются макросом QT_HAS_INCLUDE(<chrono>). Возможно при компиляции библиотеки этот макрос был выключен.
1
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
20.11.2018, 23:45  [ТС]
TRam_, Croessmah, Ок. А как тогда этот макрос включить можно? Как можно пересобрать библиотеку, чтобы этот флаг был точно включен?
Для загрузки и сборки либы я использую Conan Package Manager. Вот рецепт по котором собирается либа. В основном, вся настройка происходит в файле conanfile.py

Добавлено через 30 минут
TRam_, Croessmah, В общем, наткнулся на вот такой баг в Qt. Т.е. я так понимаю, что решения пока что не существует?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
21.11.2018, 00:34
Видимо для 2015 студии в пределах обычной лицензии - нет.
0
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
21.11.2018, 00:36  [ТС]
TRam_, Я вот за 2017 студию не совсем понял. В ней решена эта проблема или еще нет?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
21.11.2018, 00:53
Судя по написанному в листинге бага - да, решена. Потому что внедрён https://en.cppreference.com/w/... or/include который содержится в QT_HAS_INCLUDE
1
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
21.11.2018, 01:06  [ТС]
TRam_, Что ж, буду тогда ставить 2017 студию и собирать свой проект под нее.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
21.11.2018, 01:10
Лучший ответ Сообщение было отмечено igdev как решение

Решение

P.S. include\QtCore\qcompilerdetection.h
C++ (Qt)
1
2
3
4
5
#ifdef __has_include
#  define QT_HAS_INCLUDE(x)             __has_include(x)
#else
#  define QT_HAS_INCLUDE(x)             0
#endif
1
79 / 67 / 28
Регистрация: 22.04.2016
Сообщений: 384
21.11.2018, 01:14  [ТС]
TRam_, Т.е. получается, все предельно просто: если компилятор поддерживает __has_include, то добавляем его. Если нет, то 0. Таким образом, компилятор 2015 студии не поддерживает __has_include - соответственно, я и получаю свои ошибки. Верно?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
21.11.2018, 01:15
Да, всё так.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.11.2018, 01:15
Помогаю со студенческими работами здесь

Не собирается проект
Постоянно выдает следующее: 20:34:03: Выполняются этапы для проекта Simulator_evreya_dev_0_1... 20:34:03: Запускается:...

Не собирается проект
Вообщем немного предыстории: 1. Хотел воспользоватся утилитой windeployqt, ей не понравился путь к моему проекту. Там была папка...

Проект с OpenGL не собирается
Всем привет. Пробую собрать простейший проект на OpenGL. IDE Clion ###CMakeLIsts.txt### cmake_minimum_required(VERSION 3.3) ...

Проект собирается, но не запускается
Здравствуйте! У меня в Qt Creator проект собирается успешно, но при попытке его запустить вижу это (на аттаче). Что бы это могло быть?...

Долго собирается проект
Здравствуйте! Мой проект начал внезапно очень долго собираться.Сборка остановилась на 50 % и так уже пол часа. В консоли пишет : ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru