LINUX.ORG.RU

Иконка для приложения

 , , ,


0

1

Здравствуйте!

Написал код на C++ с использованием OpenGL. Осталось только уметь ставить свою иконку приложения. Облазил форумы, ничего полезного не нашёл. Система Ubuntu 12.04, Unity.

Благодарю за помощь.

Ответ на: комментарий от Stil

Очевидно, искал. OpenGL кроссплатформенный, он позволяет создавать окна, но не редактировать их структуры. На windows такую же штуку можно проделать только через WinAPI/.NET, насколько знаю. Вопрос — как в линуксе?

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

Нет, не совсем то. Это десктопная иконка, которая отображается в ярлычке приложения. А нужно, чтобы иконка отображалась в левой панели убунту. Хотя всё равно спасибо.

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

Для создания окна используется freeglut, процедура glutCreateWindow()

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

Нет, это, опять же, не совсем то. Здесь иконка не привяжется к приложению. Надо чтобы при запуске голого бинарника иконка высвечивалась на левой панели. А тут я, например, устанавливаю Cairo (менюшка наподобие Docky), и в ней отображается стандартная иконка.

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

Здесь иконка не привяжется к приложению. Надо чтобы при запуске голого бинарника иконка высвечивалась на левой панели

Я себе так ярлык для komodo edit делал, с собственной иконкой. Сейчас проверил - убрал ярлык с панели, запустил komodo - на панели появилась иконка, которую я ставил.

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

Я себе так ярлык для komodo edit делал, с собственной иконкой. Сейчас проверил - убрал ярлык с панели, запустил komodo - на панели появилась иконка, которую я ставил.

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

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

Да, тоже погуглил - с glut можно только узнать id окна и средствами XLib поставить иконку. Альтернативный вариант - переписать на Qt или SDL, и так-то оно проще даже будет.

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

Кстати, если на OpenGL переписывать, надо будет существенно менять код? Возможно ли так же передать идентификатор окна приложению?

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

Очевидно что это приложение для Питона с использованием Hadoop имелось ввиду:)

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

Не понял вопроса. OpenGL везде одинаковый, для него нужно только создать контекст. Контекст OpenGL создаётся напрямую средствами X11, winapi или cocoa какого-нибудь, либо средствами кроссплатформенных библиотек. Qt, SDL, freeglut - как раз такие библиотеки, но freeglut сам не умеет устанавливать иконку приложения; SDL и Qt - умеют.

Т.е. за манипуляции с окном OpenGL не отвечает и они осуществляются силами Qt, SDL, freeglut или платформо-зависимой библиотекой. А вот рисование везде будет одинаковым.

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

Qt сама написана на C++ и использует некоторые идиомы вроде d-pointer, так что код пишется только при добавлении логики. Вот простейший код создания окна:

#include <QApplication>
#include <QWidget>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget w;
    w.show();
    
    return a.exec();
}
Если QWidget заменить на собственный класс - скажем, Widget - унаследованный от QGLWidget - и перегрузить метод updateGL(), то получится простейшее OpenGL приложение. В том же классе Widget будет доступен унаследованный метод setWindowIcon(const QIcon&). Объект класса QIcon можно получить прямо из файла.

Если для сборки используется qmake (или в качестве среды - QtCreator), в файл *.pro надо будет добавить QT += opengl.

quiet_readonly ★★★★ ()

В общем, я посчитал варианты сложными и решил портировать код на windows (курсовую можно сдавать на любой ОС). Оказывается, OpenGL создаёт ресурс с именем GLUT_ICON, указывающий на иконку приложения. Сменить иконку можно очень просто, добавив файл ресурса (в той же visual studio) и прописав в нём код (можно посмотреть здесь). Интересует, есть ли в linux такое же простое решение? Понятно, что если писать на Qt, то просто, а ещё как-нибудь? Без использования Xlib.

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