LINUX.ORG.RU

QT аналог ImageList

 


0

0

Дамы и господа специалисты и гуру в QT Перевожу один немаленький проект из С++ на RadStudio в аналог в QT для Linux. Вроде всё понятно кроме одного нюанса В проекте присутствует очень много объектов класса TImageList в которые загружены куча разных картинок Вопрос, какой аналог и как использовать TImageList в среде QT ? Особенность, проект собирается посредством Makefile, а не стандартным pro файлом


QT - это QuickTime. А вы, скорее всего, имеете в виду Qt.

meliafaro ★★★★★
()
Ответ на: комментарий от EXL

Отлично ! Теперь главный вопрос, как хранить все эти картинки внутри своей библиотеки SO п.с. извиняюсь за стиль вопросов, но я убеждённый виндоусятник-борландовец, поэтому некоторые моменты могут показаться ламерскими

uuof
() автор топика
Ответ на: комментарий от uuof

С помощью такого механизма, как QRC, в документации есть примеры как для исполнительного файла, так и для библиотеки:

http://doc.qt.io/qt-5/resources.html

Все картинки будут вкомпилены внутрь бинарного файла (библиотеки или экзешника).

EXL ★★★★★
()
Ответ на: комментарий от uuof

хранить все эти картинки внутри своей библиотеки SO

Если ты foo.so имеешь ввиду, типа как виндовые ресурсы, то их принято хранить не в ней, а в /usr/local/share/foo/images/*, ну или другой инсталл-префикс выберешь вместо /usr/local.

Алсо, https://unix.stackexchange.com/questions/6085/how-do-idiomatic-unix-programs-...

Если совсем неохота вот это вот все, то можно вставить их бинарно через линкер, либо статическими данными.

https://csl.name/post/embedding-binary-data/

https://stackoverflow.com/questions/1710376/convert-files-of-any-types-to-a-f...

anonymous
()
Ответ на: комментарий от anonymous

лентяи

anonymous, я программирую с 1990 года и считаю что основная роль программиста в том, чтобы используя свой опыт и знания создать какой то программный продукт, и 90% своих усилий направлять на предметную облать приложения (задачи, билиотеки) а не заниматься байтодрочерством, изобретением велосипедов, подпиливанием и допиливанием псевдооболочек, танцев с бубном (например в этой теме), и изучение ненужных талмудо на тему как правильно подобрать компилятор, и как подключить сторонюю библиотеку DLL

В Борланде всё предельно просто. Кидаю компонент на форму (по вашему на Widget) и тупо в режиме дизайна заливаю 100 или 200 картинок. Используя методы и свойства компонента я юзаю эти картинки где мне нужно... а в QT это целая байтодрочерная процедура с бубнами, английскими талмудами и самое важное при полном отсутствии работающих примеров. Вместо того чтобы продолжать перевод задачи, я потратил 3 часа впустую чтобы выяснить какой бубен и к какому велосипеду прикрутить чтобы получить элементарный аналог TImageList

uuof
() автор топика
Ответ на: комментарий от EXL

EXL ★

Огромное Вам спасибо за подсказки. RCC файл скомпилировать удалось Теперь вопрос, как это использовать в коде? Говорят что нужно его регистрировать потом что??? И ещё, как всё это приписать в MakeFile &

QTDIR=/usr/share/qt4
QTDIRLIB = $(QTDIR)/lib64

UIC = $(QTDIR)/bin/uic
MOC = $(QTDIR)/bin/moc
#GCC = g++ -fPIC -pipe
GCC = g++ -g -O1 -O2 -O3 -fPIC -Wall 
#-----------------------------------
QT_DEFINES  = -DQT_CORE_LIB -DQT_GUI_LIB -DQT3_SUPPORT -DQT_THREAD_SUPPORT -DQT_SHARED
MAP_DEFINES = -DLINUXAPI -DCLASSPREFIX=mylibrary
QT_INCPATH  = -I/usr/share/qt4/mkspecs/linux-g++ -I$(QTDIR)/include -I$(QTDIR)/include/Qt -I$(QTDIR)/include/QtCore -I$(QTDIR)/include/QtGui -I$(QTDIR)/include/QtSql -I$(QTDIR)/include/Qt3Support 
#-----------------------------------
all:mylibrary.so
mylibrary.so: moc_editsemantic.o editsemantic.o convertor.o initdll.o 
	g++ -g -shared -o mylibrary.so moc_editsemantic.o editsemantic.o \
	convertor.o initdll.o \
        -L$(QTDIRLIB) -lQtGui
#-----------------------------------
[/b]rcc -binary myresource.qrc -o myresource.rcc[/b]
#-----------------------------------

Есть у кого-то рабочий пример

uuof
() автор топика
Ответ на: лентяи от uuof

В Борланде всё предельно просто. Кидаю компонент на форму (по вашему на Widget) и тупо в режиме дизайна заливаю 100 или 200 картинок. Используя методы и свойства компонента я юзаю эти картинки где мне нужно... а в QT это целая байтодрочерная процедура с бубнами, английскими талмудами и самое важное при полном отсутствии работающих примеров.

Чем тебе не угодил *.qrc? Там также в режиме дизайна нажимаешь кнопку «Add»->«Add files» и в диалоге выбираешь файлы что хочешь вшить в бинарь. А затем добавляешь функцию на пару строк которая загружает эти файлы в нужную структуру.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Чем тебе не угодил *.qrc?

Добавил qrc в проект.files собрал, в коде написал вот это Q_INIT_RESOURCE(resources); и весь проект на этой строчке валится

uuof
() автор топика
Ответ на: комментарий от EXL

http://doc.qt.io/qt-5/resources.html

Сделал бинарник RCC

прописал в конструкторе формы

   QResource::registerResource("iconlist.rcc");
   QPixmap pix;
   pix.load(":icon/icons/20.png");
   label->setPixmap(pix.scaled(pix.size()));
   label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);

где label = QLabel результат 0 (нулевой) ничего не валится и ничего не грузится iconlist.rcc создавал с файла QRC вот такого содержания

<RCC>
    <qresource prefix="/icon" lang="EN">
        <file alias="img1">icons/1.png</file>
        <file alias="img2">icons/2.png</file>
        <file alias="img3">icons/3.png</file>
        <file alias="img4">icons/4.png</file>
        <file alias="img5">icons/5.png</file>
.....
    </qresource>
</RCC>

что ещё не хватает QT ?

uuof
() автор топика
Ответ на: Чем тебе не угодил *.qrc? от uuof

Добавил qrc в проект.files собрал, в коде написал вот это Q_INIT_RESOURCE(resources); и весь проект на этой строчке валится

Не собирается проект или крашится? Где текст ошибки?

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

Не собирается проект или крашится? Где текст ошибки?

нет текста ошибки есть только смерть приложения и через пару секунд сообщение типо Segmentation Fault

uuof
() автор топика

вопрос

Дамы и господа У меня есть проект у меня есть файл RCC созданный с QRC в котором 20 каринок

Вопрос, кто нибудеь может написать шаги которые я должен прописать в код, чтобы получить картинку с энным номером например на QLabel ?

uuof
() автор топика
Ответ на: вопрос от uuof

Вопрос, кто нибудеь может написать шаги которые я должен прописать в код, чтобы получить картинку с энным номером например на QLabel ?

Чтение данных с *.qrc происходит также как чтение с диска, только путь начинается с двоеточиях. Если у тебя файлы с номерами типа: ":/images/image_1.png", ":/images/image_2.png" и т.д. То просто пишешь что-то типа:

m_label->setPixmap(QPixmap(QString(":/images/image_%1.png").arg(imageNum)));

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

То просто пишешь что-то типа:

прописал все варианты и комбинации

регистрации

1. QResource::registerResource("/path/to/iconlist.rcc");
2. QResource::registerResource("iconlist.rcc");
3. QResource::registerResource("/home/ubuntu/myprg/iconlist.rcc");
и использование
   QPixmap pix;
[b]
1  pix.load(":/icons/10.png");
2  pix.load(":/img10.png");
3  pix.load(":/icon/icons/10.png");
4  pix.load(":/icon/img10.png");
5  pix.load(":/icon/icons/img10.png");
[/b]
   label->setPixmap(pix.scaled(pix.size()));
   label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter)

на QLabel-е рисунка нет

uuof
() автор топика
Ответ на: комментарий от V1KT0P

Выложи минимальный проект

Во первых это аналог DLL который компилируется под определённую среду (приложение)... по вашему «Плагин». Если я выложу проект вы тупо его не соберёте ибо там тянется много кишок с разных SO приложения и в нагрузку завязано на электронный ключ Во вторых приложение создано не по человечески через PRO файл а древними допотопными методами через MAKEFILE Сейчас попробую создать отдельный проект и закинуть сюда

uuof
() автор топика
Ответ на: комментарий от RazrFalcon

возвращает boo

QResource::registerResource возвращает bool, как бы. Или вы с C++ на Вы?

нет я на вы с QT... Возвращает 0 (FALSE) В чём может быть проблема?

uuof
() автор топика
Ответ на: лентяи от uuof

Анонимус абсолютно согласен с тобой, ведь знание, как засунуть бинарь в объектный файл или куда их класть в фс, он тоже получил не потому, что это пипец интересно или прибыльно. В комментарии ирония же, под Delphi не одна прога написана.

Вообще не понимаю зачем это переписывать, и зачем появились всякие куте, когда можно было купить борланд и пилить и пилить VCL и не знать бед. Эмбаркадеро все запороли своим выжимающим ценником и переходом на недосишарп.

anonymous
()
Ответ на: комментарий от RazrFalcon

QResource::registerResource возвращает bool

убрал всё вот это непонятное месиво «/path/to/» которое с «документации» - выдало 1 (TRUE) но так и не рисует

uuof
() автор топика
Ответ на: комментарий от anonymous

Эмбаркадеро

Вообще не понимаю зачем это переписывать, и зачем появились всякие куте, когда можно было купить борланд и пилить и пилить VCL и не знать бед. Эмбаркадеро все запороли своим выжимающим ценником и переходом на недосишарп.

а это уже вопрос к заказчикам из РФ, зачем они после 2014 года так массового и истерически переходят из Windows на LINUX... наверное боятся чтобы дядя Билл не отключил их Винду одной кнопкой с пиндостана =))

uuof
() автор топика
Ответ на: лентяи от uuof

заниматься байтодрочерством

допиливанием псевдооболочек

танцев с бубном (например в этой теме)

изучение ненужных талмудо

я потратил 3 часа впустую чтобы выяснить какой бубен и к какому велосипеду прикрутить

Дружок, для человека, который хочет, чтобы ему помогли освоить кроссплатформенный тулкит, ты чересчур хамоват.

QT

Тебе уже намекнули, что библиотека называется по-другому.

Всем комментаторам: ребята, вы точно уверены, что ему стоит помогать?

hobbit ★★★★★
()
Ответ на: Выложи минимальный проект от uuof

Вот рабочий вариант: https://ru.files.fm/u/mt8symc8 Удалил «iconlist.rcc», не понял зачем он тут нужен. Также убрал строку:

if (QResource::registerResource("iconlist.rcc"))
И наконец заменил файл «10.png» на нормальный. Те png что ты положил в пример стандартный просмотрщик оценил как invalid png(хотя gimp и смог открыть) но Qt также эти невалидные png файлы не может открыть. По моему из-за этих png файлов у тебя и не получалось ничего.

V1KT0P ★★
()
Ответ на: комментарий от V1KT0P

также эти невалидные png файлы

Огромное спасибо за подсказку ! Дай тебе Бог здоровья и самых жирных(в деньгах) и легких (в реализации) проектов ----- Теперь вопрос следующий, почему Линукс не читает PNG файлы ? У этой ОС какие то другие PNG файлы или вообще альтернативные форматы всех изображений?

uuof
() автор топика
Ответ на: также эти невалидные png файлы от uuof

То, что ты кормишь своей программе не является PNG-файлом:

$ hexdump -C 10.png 
00000000  42 4d 36 04 00 00 00 00  00 00 36 00 00 00 28 00  |BM6.......6...(.|

Непонятно кто и зачем выставил им расширение PNG, когда это BMP.

Для экономии места их действительно лучше сконвертировать в PNG.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от hobbit

Тебе уже намекнул

[cite]Тебе уже намекнули, что библиотека называется по-другому. Всем комментаторам: ребята, вы точно уверены, что ему стоит помогать?[/cite] Судя по твоему комментарию, а так же по знанию предметной области, твои комментарии в этой теме вообще не уместны. Я лучше пообщаюсь с реальными специалистами V1KT0P-ом,EXL-м которые реально соображают и помогают, чем с теоретиками-задушевниками, вечно изобретающими велосипед в консоли и важно раздувающие щёки выдавая себя за специалистов, реальная цена которых выеденного яйца не стоит.

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

uuof
() автор топика
Ответ на: комментарий от EXL

то, что ты кормишь своей программе не является PNG-файлом:

EXL, но это файлы с реального проекта в Windows

Одним словом дамы и господа, всем огромное спасибо ! Как я понял речь в некорректности самих PNG файлов.

uuof
() автор топика

EXL, но это файлы с реального проекта в Windows

В любом случае, их расширение не соответствует реальному содержанию. Либо сконвертируйте всё в PNG, либо переименуйте всё в BMP.

EXL ★★★★★
()
Ответ на: комментарий от EXL

EXL

EXL - огромное Вам спасибо и Виктору тоже. Вы реальные специалисты в области. я уже реально думал что начинаю тупить

п.с. Если чё я обращусь к вам тут на форуме.. =))

uuof
() автор топика
Ответ на: Тебе уже намекнул от uuof

но с теоретиками по типу вас

А... ну ладно, пускай буду теоретиком. :)))

P.S. EXL, я совершенно серьёзно. Чем больше ты будешь помогать подобным пациентам, тем больше они будут наглеть.

hobbit ★★★★★
()
Ответ на: комментарий от EXL

Спасибо Спасибо Спасибо !

Уважаемый Виктор и EXL Я на этом форуме гость не частый (хоть и 7 лет как зарегистрирован) но хочу выразить вам огромную благодарность за помощь в моей проблеме. Реально, расширение файла не соответствовало начинке, и Убунта этого почему то не поняла. Что я сделал на основании Ваших советов 1. сменил всем файлам расширение в BMP 2. внёс коррективы в QRC 3. Сделал как показал Виктор НО !!!! в дизайнере всё видно, даже в ручном режиме закинул картинку в QLabel НО после сборки по технологии MakeFile даже картика которую видно в QLabel Widget-а не видна в собранной библиотеке..

Я прочила ещё раз ссылку уважаемого(мой) EXL и сделал по варианту2 4. скомпилировал RCC файл а терминале rcc -binary iconlist.qrc -o iconlist.rcc 5. в makefile вместо строки RESOURCES += iconlist.qrc написал RESOURCES += iconlist.rcc 6. вернул обратно строку в конструкторе QResource::registerResource(«iconlist.rcc»); и собрал проект в итоге у меня всё получилось !!!

вопрос можно считать решённым

uuof
() автор топика
Ответ на: комментарий от hobbit

Чем больше ты будешь помогать подобным пациентам

а ты чё вообще в мою тему прилезло, раз в предметной области полный ноль... Ахинею какую то пронесло по поводу «что библиотека называется по-другому.» Какая билиотекка, по какому другому. Рисанутся тесаком пришёл, или повыделыватся перед уважаемыми спецами что чего-то стоишь в этой жизни, а пОцыент?

uuof
() автор топика
Ответ на: комментарий от hobbit

Чем-то данный пОцЫент напоминает местную нейросетку, u0atgKIRznY5 который. Только более наглый.

anonymous
()
Ответ на: комментарий от anonymous

Да ну, по сравнению с ТСом u0atgKIRznY5 просто образец корректности.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

P.S. EXL, я совершенно серьёзно. Чем больше ты будешь помогать подобным пациентам, тем больше они будут наглеть.

У нас тут технический форум, а не институт благородных девиц. У кого-либо есть проблема, а у меня есть решение или предположение, я его опубликую. И для меня совершенно не важно, кем является тот человек, который задаёт вопрос: наглый он, или же пишет QT вместо Qt, или же он гей, или вообще коммунист. В конце-концов другие люди пользуясь поисковиком, могут набрести на эту тему и среди множества свежих шуток про QT != Qt найдут решение своей проблемы.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

наглый он, или же пишет QT вместо Qt, или же он гей, или вообще коммунист.

Коммунист - это самое страшное что может быть? Даже страшнее гея?

nvl ★★★
()
Ответ на: комментарий от uuof

Только иконки там не храни (по крайней мере давай возможность их заменять). Дай юзеру возможность ставить их с темой иконок.

peregrine ★★★★★
()
Ответ на: комментарий от hobbit

ребята, вы точно уверены, что ему стоит помогать?

Вот тебя не спросили... Ты кто, чтоб решать кто кому должен помогать?

Такие как ты, в сталинские времена, доносы страчили. А ныне, от безысходности, гадят под дверь соседям.

anonymous
()
Ответ на: комментарий от EXL

У нас тут технический форум, а не институт благородных девиц.

Фраза-маркер. Такая же, как и «это бизнес, ничего личного». Эти фразы никогда не употребляются про что-то хорошее.

наглый он, или же пишет QT вместо Qt

Ты тоже, что ли, ничего не увидел, кроме «QT вместо Qt»? Это так, вишенка на торте, не более того. Я этот пункт мог вообще не упоминать.

Поясняю. Человек пришёл сюда с вопросами про Qt. При этом, не разобравшись в вопросе, он начал своё незнание вопроса начал агрессивно переносить на саму Qt и тех, кто её разрабатывает. Ещё раз повторю, если ты начало пропустил:

заниматься байтодрочерством

допиливанием псевдооболочек

танцев с бубном (например в этой теме)

изучение ненужных талмудо

я потратил 3 часа впустую чтобы выяснить какой бубен и к какому велосипеду прикрутить

То есть одно из двух: либо он толстый тролль, либо твёрдо уверен в своём праве задавать вопросы хамоватым тоном и ожидать, что все вокруг начнут суетиться и подсказывать. Ни первое, ни второе, на мой взгляд, поощрения и помощи не заслуживает. Кстати, чуть ниже по тексту он ещё нацпол провоцировал, что свидетельствует в пользу первой гипотезы.

Ещё несколько лет назад подобные персонажи писали под Windows, изредка под Мак и линукс в принципе не желали признавать, создавая проблемы линуксоидам. Теперь, как выясняется, жизнь иногда начинает заставлять - но даже начав писать под линукс, они по-прежнему уверены в своём праве хамить в сторону сообщества и его разработок. А зачем поддерживать их в этой уверенности?

В конце-концов другие люди пользуясь поисковиком, могут набрести на эту тему и среди множества свежих шуток про QT != Qt найдут решение своей проблемы.

А если бы они не нашли решение - создали бы свою, нормальным языком задали бы вопрос и получили ответ, возможно, даже от тебя. И обошлось бы без поощрения подобных персонажей. И потом другие люди находили бы решение в нормальной теме, а не здесь.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

Как ты достал уже своим нытьем. Лучше просто доносы строси без этого флуда.

anonymous
()
Ответ на: комментарий от hobbit

То есть одно из двух: либо он толстый тролль, либо твёрдо уверен в своём праве задавать вопросы хамоватым тоном и ожидать, что все вокруг начнут суетиться и подсказывать. Ни первое, ни второе, на мой взгляд, поощрения и помощи не заслуживает.

Я не увидел хамства. Я увидел недовольство фреймворком Qt. Qt у нас превратился в идеальный фреймворк, лишённый всех недостатков? Нет, напротив. Я использую Qt и частенько его ругаю за откровенно непонятные мне вещи, которые можно было сделать проще и лучше. Мне непонятно, почему все программы на Qt 5 внезапно стали зависимы от OpenGL, хотя его не используют, например.

При этом, не разобравшись в вопросе, он начал своё незнание вопроса начал агрессивно переносить на саму Qt и тех, кто её разрабатывает.

Зачем вы недовольство и пусть даже хамство по отношению к Qt переводите на свой счёт? Вот только не нужно этой фанатичной любви к этому фреймворку и к его разработчикам. Они такие же люди как и мы и часто принимают ухудшающие (где там qtconfig?), а не улучшающие фреймворк решения. Да и Qt это просто инструмент. Инструмент, которому полезна критика и который остро нуждается в ней. В противном случае под радостные и одобряющие возгласы различных фанатиков он превратится в нечто несуразное, вроде «вечно непадающей».

Ну и да, пересади меня сейчас с того же Qt Creator'а на какой-нибудь C++ Builder, и дай подобное задание, я тоже буду материться на Embarcadero и неудобство. Каждый своё болото хвалит.

Ещё несколько лет назад подобные персонажи писали под Windows, изредка под Мак и линукс в принципе не желали признавать, создавая проблемы линуксоидам.

Потому что за это платили. Наверняка разрабатывая под MS Windows они тоже сталкивались с различными проблемами и материли дядюшку Билла или тот же не к ночи помянутый Borland.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 3)
Ответ на: комментарий от EXL

Вот только не нужно этой фанатичной любви к этому фреймворку и к её разработчикам.

А где ты увидел фанатичную любовь? Уважение к труду разработчиков и фанатичная любовь - несколько разные вещи. Вот именно уважения я и не увидел.

Инструмент, которому полезна критика и который остро нуждается в ней.

Вот именно, что критика.

Твоё недовольство запихиванием openGL туда, где можно обойтись без него - это критика. А вот развязные претензии, которые я цитировал выше - это НЕ критика, это по-другому называется.

или тот же не к ночи помянутый Borland

Между прочим, к Борланду с технической точки зрения у меня как раз особых претензий уровня «ужос-ужос» нет. Делали очень зрелый, красивый инструментарий, хоть и не без недостатков. Хорошие IDE, хорошие отладчики, великолепная документация (я свои первые программы на турбопаскале под досом вообще по справке писал). Но не осилили кроссплатформенность (хотя пытались, на Kylix я одно время очень надеялся). Ну и самое главное - проприетарщина, намертво завязанная на одну фирму. Что в конечном счёте и сыграло роковую роль. Delphi и С++ Builder от Борланда знали и пользовались, Delphi от Эмбаркадеро уже воспринимался как недоразумение.

А LGPLную Qt, если не ошибаюсь, не смогла погубить даже продажа Нокии Майкрософту (хотя я с хронологией могу путать, возможно, её выделили несколько раньше).

hobbit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.