Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Гурман от Октябрь 17, 2016, 21:23



Название: Нижний регистр в имени инклюда плагина дизайнера
Отправлено: Гурман от Октябрь 17, 2016, 21:23
Есть два моих разных плагина, которые в дизайнере перетаскиваются на окно приложения. У обоих плагинов в названии есть символы в верхнем регистре. При сборке приложения получаю ошибку "не найден инклюд <widgetname.h>" хотя должно быть WidgetName.h. Смотрю в исходник mainwindow.ui, который создаёт дизайнер, и там вижу
Код:
<customwidget>
  <class>WidgetName</class>
  <extends>QWidget</extends>
  <header>widgetname.h</header>
</customwidget>
но у другого плагина
Код:
<customwidget>
  <class>OtherWidget</class>
  <extends>QWidget</extends>
  <header>OtherWidget.h</header>
</customwidget>
как и должно быть у обоих. При этом widgetname нигде у меня в исходниках не встречается. Чего это за хрень? Кто-нибудь такое видел?


Название: Re: Нижний регистр в имени инклюда плагина дизайнера
Отправлено: carrygun от Октябрь 18, 2016, 08:18
Скорее всего IDE так делает. Например, при создании классов в креаторе они создадутся на диске в нижнем регистре. Думаю для кроссплатформенности это дело сделано, так как в линуксах "widgetname.h" и "OtherWidget.h" - два разных файла.


Название: Re: Нижний регистр в имени инклюда плагина дизайнера
Отправлено: Гурман от Октябрь 18, 2016, 10:54
Кроссплатформенность???... Эта фича ОТРИЦАТЕЛЬНО влияет на кроссплатформенность. В Windows компилятор слопал бы #include "widgetname.h" при том, что сам файл назывался бы WidgetName.h. А потом при переносе в Linux вылетела бы ошибка. Но я делаю в Linux и наткнулся сразу. НЕ ДОЛЖНО БЫТЬ такой фичи. Имена инклюдам даю я, и среда не имеет права их переделывать. Кстати, в самом Qt сплошь и рядом инклюды имеют символы верхнего регистра в именах инклюдов, и это вполне кроссплатформенно.

ИМХО - это баг дизайнера.


Название: Re: Нижний регистр в имени инклюда плагина дизайнера
Отправлено: Bepec от Октябрь 18, 2016, 11:16
Код:
QString CButtonPlugin::includeFile() const
{
    return QLatin1String("cbutton.h");
}

Насколько я помню вооон оттуда берутся все инклуды. Так что где то у вас там закавыка.
PS дизайнер тупой, он сам ничего не добавляет. Всем рулит плагин.


Название: Re: Нижний регистр в имени инклюда плагина дизайнера
Отправлено: Гурман от Октябрь 18, 2016, 14:29
Код:
QString CButtonPlugin::includeFile() const
{
    return QLatin1String("cbutton.h");
}

Насколько я помню вооон оттуда берутся все инклуды. Так что где то у вас там закавыка.
PS дизайнер тупой, он сам ничего не добавляет. Всем рулит плагин.


Там всё тупо, никаких преобразований, в обоих случаях одинаково:

QString WidgetName::includeFile() const
{
    return "WidgetName.h";
}

и

QString OtherName::includeFile() const
{
    return "OtherName.h";
}

имена разумеется в реальности другие, но принцип этот же.


Название: Re: Нижний регистр в имени инклюда плагина дизайнера
Отправлено: Bepec от Октябрь 19, 2016, 18:23
Дизайнер ничего в общем то не меняет. Он просто подставляет в шаблон эти получаемые строки. Так что ошибка где то у вас.


Название: Re: Нижний регистр в имени инклюда плагина дизайнера
Отправлено: Гурман от Октябрь 19, 2016, 18:28
Дизайнер ничего в общем то не меняет. Он просто подставляет в шаблон эти получаемые строки. Так что ошибка где то у вас.

В исходниках нет. Потому что исходники плагина (включая проект), у которого имя инклюда коверкается, получены из исходников плагина, в котором всё в порядке, путем копирования и простой замены имён. Всё. Если где-то в настройках... то облазил всё, не нашел. Пришлось просто переименовать инклюд в нижний регистр, и соответственно изменить все отсылки на него в исходниках и проекте.

Подозреваю, что всё-таки глюк дизайнера, лишний lowercase где-то.


Название: Re: Нижний регистр в имени инклюда плагина дизайнера
Отправлено: Гурман от Ноябрь 03, 2016, 01:46
Лазил по настройкам - и где-то вывалилось окно, в котором задавалось имя того саиого инклюда, и оно было написано в нижнем регистре. Решил уже не переделывать.