Qt как сделать иконку приложения
Эта статья ссылается наНастройте pycharm для преобразования .qrc в .py, Оригинальность непростая, спасибо за поддержку!
Некоторые файлы ресурсов (видео, изображения, значки, документы) более или менее используются при разработке интерфейса, чтобы сделать интерфейс более богатым.Как загрузить ресурсы в указанное место разрабатываемого интерфейса? В качестве примера возьмем загрузку изображений
состоит из трех этапов:
1. Напишите файл .qrc
В дизайне интерфейса дизайнера QT вы не можете напрямую добавлять ресурсы, такие как изображения или значки. Вам нужно написать файл .qrc в каталоге разработки (вы можете открыть его с помощью Блокнота)
После входа в дизайнер qt, создайте виджет, используйте браузер ресурсов для создания файла .qrc
Найдите несколько изображений и поместите их на свой компьютер (вы можете найти путь, я обычно помещаю их в каталог проекта), щелкните правой кнопкой мыши только что созданный файл префикса и нажмите «Добавить файл», чтобы добавить свои изображения. Обнаружена копия проблемной точки
Обычный результат выглядит следующим образом:
Перетащите метку в форму, найдите растровое изображение на панели редактирования атрибутов, нажмите «Выбрать файл» и выберите понравившееся изображение, чтобы только что выбранное изображение было загружено в метку.
Сохраните файл .UI, вы обнаружите, что в каталоге вашего проекта есть файлы .qrc и .ui, конвертируйте их в файлы .py соответственно
Полученный файл .qrc выглядит следующим образом
2、.qrc в .py руководство, пожалуйста, нажмите здесь
3、Щелкните здесь, чтобы преобразовать .ui в .py
4. Создайте логический файл.
После выполнения вышеуказанных шагов вы получите файлы .py, преобразованные из файлов .ui и .qrc.
Чтобы гарантировать разделение дизайна пользовательского интерфейса и логики,Вы можете создать еще один логический файл calluntitled.py, Напишите следующую программу
1. Сохраните знания: QIcon
Класс QIcon представляет значки и реализован в общей библиотеке QtGui. Объект QIcon можно рассматривать как комбинацию серии изображений, которые можно использовать для настройки значков разрабатываемого вами программного обеспечения.
2. Создайте файл .qrc.
То же, что и выше
3. Модификация файла логики
Мы хотим, чтобы в файле логики (То есть calluntitled.py)import QIcon
Вот конкретный код:
Тогда, еслиname==“main": Добавьте оператор для вызова изображения в функции
Как показано
Нажмите "Выполнить", появится следующий интерфейс.
Интеллектуальная рекомендация
Замена персонажа
Пожалуйста, реализуйте функцию для преобразованияЗаменить каждый пробел"% 20". Например, когда строка We We Happy. Строка после замены - We% 20Are% 20Happy. Встроенные функции для строк Pyth.
Подсистема ввода Android - Itreader EventHub :: GetEvents Mneedtscandevices Переменные Подробный анализ
EventHub :: MeetEvents Method, Mneedtscandevices Переменная процесса вызова подробный анализ . if (mNeedToScanDevices.
Базовые знания Python3: List
Просто поймите: 1. Типы элементов в списке могут быть разными, он поддерживает числа, строки и даже списки (так называемая вложенность). 2. Список представляет собой список элементов, заключенн.
NOIP 2017 Улучшенное сокровище группы ___ государственное давление dp + dfs
Главная идея: ответ: Этот вопрос найти несложно, f [i] указывает, что состояние выбранной точки равно i, это минимальная стоимость, а dis [i] указывает количество сокровищ от начальной точки до i. , а.
HYSBZ-2002: Bounce Bouncing Sheep (алгоритм блокировки)
Отскок летающей овцы Однажды Лостмонки изобрел сверхэластичное устройство и, чтобы похвастаться перед своими друзьями-овцами, пригласил маленькую овечку поиграть в игру. В начале игры Lostmonkey разме.
Ну что, друзья, вот мы и добрались до программирования стандартных графических приложений с помощью Qt5. На этом уроке мы попробуем создать наши первые программы, которые будут содержать такие графические элементы, как: кнопка, значок приложения, всплывающая подсказка, различные курсоры мыши, а также рассмотрим, как можно центрировать окно нашей программы и бегло коснемся вопроса работы механизма «сигнал-слот».
Простой пример
А начнем мы с простого примера, который отображает на экране стандартное окно:
// Каждое Qt5-приложение (за исключением консольных) должно включать следующую строку // Главный виджет, который представляет окно нашей программы window . resize ( 250 , 150 ) ; // изменяем размер виджета в пикселях window . setWindowTitle ( "Simple example" ) ; // устанавливаем заголовок для главного окна // С помощью метода exec() запускаем основной цикл нашей программыРезультат выполнения программы:
Всплывающая подсказка
Всплывающая подсказка — это небольшой всплывающий прямоугольник с некоторым текстом, который появляется, когда вы наводите курсор на какой-нибудь элемент в приложении. В нижеследующем примере мы создадим всплывающую подсказку для нашего основного окна:
window . setWindowTitle ( "ToolTip" ) ; // устанавливаем заголовок для окна window . setToolTip ( "QWidget" ) ; // устанавливаем всплывающую подсказку для виджетаРезультат выполнения программы:
Иконка для приложения
В следующем примере мы зададим иконку для приложения. Большинство оконных менеджеров отображают этот значок в левом углу заголовка и на панели задач.
Для отображения иконки мы используем метод setWindowIcon() и класс QIcon. Иконка представляет собой небольшой .jpg-файл, расположенный в текущем рабочем каталоге:
Результат выполнения программы:
Курсор
Курсор — это небольшой значок, отображающий на экране положение указателя мыши. В наших программах мы можем использовать различные виды курсоров. В следующем примере мы задействуем три фрейма, каждый из которых будет иметь свой курсор:
QFrame * frame1 = new QFrame ( this ) ; // создаем виджет frame1 -> setFrameStyle ( QFrame :: Box ) ; // устанавливаем рамки фрейма frame1 -> setCursor ( Qt :: SizeAllCursor ) ; // задаем тип курсора SizeAllCursor для фрейма QFrame * frame2 = new QFrame ( this ) ; // создаем виджет frame2 -> setFrameStyle ( QFrame :: Box ) ; // устанавливаем рамки фрейма frame2 -> setCursor ( Qt :: WaitCursor ) ; // задаем тип курсора WaitCursor для фрейма QFrame * frame3 = new QFrame ( this ) ; // создаем виджет frame3 -> setFrameStyle ( QFrame :: Box ) ; // устанавливаем рамки фрейма frame3 -> setCursor ( Qt :: PointingHandCursor ) ; // задаем тип курсора PointingHandCursor для фреймаРезультат выполнения программы:
Кнопка
В следующем примере мы добавим на нашу форму самую обычную кнопку. Нажатие на кнопку приведет к закрытию приложения. И здесь же впервые будут использованы понятия сигналов и слотов:
QPushButton * quitBtn = new QPushButton ( "Quit" , this ) ; // создаем новую кнопку quitBtn -> setGeometry ( 50 , 40 , 75 , 30 ) ; // изменяем размеры кнопки в пикселях и помещаем на форму окна connect ( quitBtn , &QPushButton :: clicked , qApp , &QApplication :: quit ) ;При нажатии на кнопку, генерируется сигнал clicked . Слот — это метод, который реагирует на сигнал. В нашем случае это будет слот quit основного объекта приложения. QApp — это глобальный указатель на объект приложения. Он определен в заголовочном файле QApplication.
connect ( quitBtn , &QPushButton :: clicked , qApp , &QApplication :: quit ) ;Результат выполнения программы:
Взаимодействие виджетов
Мы заканчиваем этот урок примером, который демонстрирует возможность виджетов взаимодействовать друг с другом. Код данного примера разделен на три файла.
Следующий код является заголовочным файлом, в котором мы определяем два слота и виджет lbl .
Заголовочный файл — plusminus.h:
Q_OBJECT // этот макрос должен включаться в классы, которые объявляют свои собственные сигналы и слотыУ нас есть две кнопки и виджет lbl . С помощью кнопок мы увеличиваем или уменьшаем число, отображаемое в lbl .
Файл реализации — plusminus.cpp:
connect ( plsBtn , &QPushButton :: clicked , this , &PlusMinus :: OnPlus ) ; connect ( minBtn , &QPushButton :: clicked , this , &PlusMinus :: OnMinus ) ;А здесь происходит соединение сигналов clicked с соответствующими слотами:
connect ( plsBtn , &QPushButton :: clicked , this , &PlusMinus :: OnPlus ) ; connect ( minBtn , &QPushButton :: clicked , this , &PlusMinus :: OnMinus ) ;В методе OnPlus() мы определяем текущее значение в lbl . Виджет lbl отображает строковое значение, поэтому сначала его нужно преобразовать в целое число. Затем мы это число увеличиваем, конвертируем получившееся число снова в строковое значение и устанавливаем новый текст для label :
int val = lbl -> text ( ) . toInt ( ) ; // выполняем конвертацию в тип int lbl -> setText ( QString :: number ( val ) ) ; // конвертируем обратно в Qstring и устанавливаем новый текст для labelМетод OnMinus() отличается от метода OnPlus() только тем, что в OnMinus() значение не инкрементируется, а декрементируется (уменьшается на единицу).
А это уже наш основной файл — main.cpp:
Результат выполнения программы:
Заключение
На этом уроке мы создали наши первые графические программы с помощью Qt5, а на следующем уроке мы рассмотрим подключение стандартных меню и панелей инструментов (тулбаров).
(51 оценок, среднее: 4,90 из 5)Урок №5. Работа с файлами и каталогами в Qt5
Комментариев: 29
Да. У картинки есть конструктор, принимающий Pixmap. Потом соединяем QPushButton::clicked и QApplication::quit и всё
Потому что виджет lbl мы используем в методах OnPlus/OnMinus, т.е. нам нужно иметь доступ к этому виджету. В то время как кнопки нам нужно только создать
Расскажите пожалуйста о методе move().
Дмитрий Бушуев :P.S.: Попробуйте поставить другие значения координат и посмотреть на результат 🙂
Добрый день!
Пытаюсь изучать с вашей помощью QT, за что Вам огромное спасибо!)
У меня возник такой вопрос) в программе есть такая штука как дизайнер, с помощью которой удобно создавать объекты на нашем окне приложения и сигналы со слотами)
Какие у этого способа минусы и каким способом лучше писать приложения?)
Как решили ситуацию?(У меня сейчас подобное происходит)
Дмитрий Бушуев : Дмитрий Бушуев :Нужно создавать проект типа "Приложение Qt Widgets".
QT+=core gui widgets
CONFIG += c++11
Пишет, что С++ требует type specifier for all declarations.
Дмитрий Бушуев :Проверил у себя. Всё работает.
Добрый день. Подскажите пожалуйста в примере с курсорами в конструкторе класса Cursors задается стандартное значение указателя parent = 0. Можно ли туда заместо 0 передавать nullPtr?
Дмитрий Бушуев : Дмитрий Бушуев :Т.е. в QT есть что-то типа garbage collector? А можно поподробнее, как он здесь работает?
Дмитрий Бушуев :Добрый вечер всем. Запарился уже. Вот сбацал я программу на QT на вянде,добавил иконку в файл icon.src прописал в .pro файле и вооля-иконка exe-шнику присвоена. А как сделать иконку программы в среде linux? Подскажите пожалуйста.
А как сделать иконку программы в среде linux?
В файловом менеджере ROX-Filer можно задать кастомную иконку для ЛЮБОГО файла путем простого перетаскивания картинки в диалогое окно, но пользователь должен сделать это сам.
В Linux иконка приложения не хранится в исполняемом файле, её нужно хранить отдельно в файловой системе и указывать каждому (!) DE, где её брать.
Вот ещё вопросы: допустим я так присвоил иконку,но при распространении программы-эта икона не исчезнет? также вопрос,почему то в убунту я не могу добавить свою скомпилированную программу в панель программ сбоку справа который:) Почему?
допустим я так присвоил иконку,но при распространении программы-эта икона не исчезнет?
При правильной установке - нет.
также вопрос,почему то в убунту я не могу добавить свою скомпилированную программу в панель программ сбоку справа который:) Почему?
Потому что пользуешься Юнити (недо-ДЕ)
как понять недо-ДЕ ?
почему то в убунту я не могу добавить свою скомпилированную программу в панель программ сбоку справа который:) Почему?
Тебе нужно создать для программы файл *.desktop файл и поместить его сюды: /usr/share/applications/
и что в этом файле прописывать?
Вот я сделал на Рокс-файллере.как вы и описывали. но почему то в программе показывает,что икона установлена,а в папке также .
Недавно гуглил по теме. Всё не совсем так.
Открываешь свой ФМ, идёшь в каталог /usr/share/applications, и выбираешь из тучи .desktop файлов кучку на препарирование. Написали же .
а допустим я сделаю deb-пакет, это работа автоматизируется,не будет же пользователь скачавший программу сам всё это делать?
Ну так готовый файл запакуй в deb пакет.
А лучше вместо ручной сборки deb собирай на openSuse Build Service, там легко настроить сборку сразу на все deb/rpm дистрибутивы.
Последнее исправление: winddos 02.02.13 19:44:50 (всего исправлений: 1)
Положишь что надо в deb пакет и всё.
Всё правильно, путь Ъ - засрать систему, для не Ъ есть
Ты пользователь дистрибутива без пакетного менеджера?
Ты пользователь дистрибутива без пакетного менеджера?
Блин, это даже не женская логика.
Интересно, а какие DE и файловые менеджеры поддерживают эту фичу? Запихнуть можно, а отображается это где?
I-Love-Microsoft ★★★★★ ( 02.02.13 19:54:35 )Последнее исправление: I-Love-Microsoft 02.02.13 19:55:08 (всего исправлений: 1)
Даже если ТС собирает софт для себя любимого, все равно имеет смысл упаковывать его в пакеты.
Нафига к этом случае совать иконки в
Даже если ТС собирает софт для себя любимого, все равно имеет смысл упаковывать его в пакеты.
Это зависит. Как я понял у ТС своя программа, если она активно развивается, то придётся часто обновлять пакет и устанавливать новую версию, что в первую очередь просто добавляет суеты (система сборки же ему новый пакет не установит). Если ему надо будет распространять программу или предоставить её нескольким пользователям компьютера - сделает пакет, установит как положено.
Сколько фейспалмов выше в треде ух!
.desktop файл тебе все равно придется сделать.
Дополню. QRC ресурсы вконпиливаются в бинарь. Если не хотеть ресурсы в бинаре то нужно их класть в правильный /usr/share/program_name и уметь их подгружать. Ах да там жабист\скалист недавно хотел autotols для префикса, так вот просто используем DEFINES на основе INSTALL_PREFIX.
bhfq ★★★★★ ( 02.02.13 20:43:26 )Последнее исправление: bhfq 02.02.13 20:49:55 (всего исправлений: 2)
Ужас и моральный террор. Qt предоставляет свой кросплатформенный метод выставить appicon (это тот, который отображается в углу окна, например). Ищи в документации. Кроме того Qt предоставляет свой кросплатформенный метод запихнуть ресурсы в бинарник: их собственный компилятор ресурсов запихивает файлы в статический массив и позволяет обращаться к таким массивам как к файлам (ищи в документации). Иконку которая отображается в меню, лаунчерах и ещё хрен знает где рисует не приложение, а меня, лаунчер и ещё хрен знает что (скорее всего DE). Для того чтобы оно (хрен знает что) это делало ему потребуется специальный desktop-файл про твоё приложение и… иконка которая будет лежать отдельным файлом. Как писать desktop-файл ищи в документации^W^W^Wпосмотри в файлах которые уже есть у тебя в системе.
В данном HOWTO мы подробно рассмотрим как свернуть форму приложения на Qt в системный трей на всех платформах: Windows, GNU/Linux, MacOS. Мы будем использовать только методы Qt и никаких хаков вроде вызова WinAPI функций и т.д.
Введение
Создаём проект
Создайте новый проект на Qt: File -> New file or Project -> Application -> Qt Widgets Application. Названия и пути укажите произвольные.
Подключаем заголовочные файлы
Для начала нам потребуется подключить заголовочные файлы, которые отвечают за работу с элементом QtTray. В файлах mainwindow.h и mainwindow.cpp пропишите:
Работаем с заголовочными файлами
В mainwindow.h пропишите свойства и методы, которые будут использоваться в проекте:
Добавляем значок в ресурс
Редактор ресурсов Qt Creator
Работаем с кодом
Опишите новый метод, в котором будет создан объект класса QSystemTrayIcon, заданы его свойства, добавлено простое контекстное меню и обработчик клика по значку в трее:
Добавьте методы обработки кликов по иконке в системном трее:
Создайте и добавьте контекстное меню для нашего значка:
Теперь напишем перехватчик события сворачивания формы на панель задач и вместо этого свернём её в трей:
Завершение и сборка
Указанные примеры кода не имеют каких-либо проверок на наличие трея в окружении (в среде Gnome например трея может не быть), восстановление значка в случае падения приложения, управляющего треем (Explorer.exe в Windows) и т.д. Это было сделано сознательно, дабы максимально упростить код.
Исходники проекта
6 комментариев к записи
Вот это часть кода не очень понятна
В ресурсном файле вы должны создать префикс images, перейти в него и залить файл abc.jpg. Только после этого он будет доступен по указанному в примере пути.
Размер PNG может быть любым.
В Windows, в папке с файлами проекта (там где main.cpp и pro файл), есть папка images.
В ней файл key.jpg.
Несмотря на это, куда бы я не загружал картинку,
у меня она не выводится при запуске приложения. Выводится пустое место.
@Иван
Выглядеть в редакторе ресурсов должно вот так.
Добрый день.
Скажите пожалуйста, а почему иконка в трее отображается в начале панели на месте а точнее на одной из кнопок где у окна закрыть, свернуть и развернуть.
В трее же должно отображается вместе с остальными иконками около часов справа, а иконка весит слева. У меня Ubuntu 14.04
Спасибо.
@Alexey
В Ubuntu Unity своё представление трея, которое по понятным причинам не поддерживает никто. Стандартный трей у них раньше вообще не выводился, но после того, как разработчики поняли, что под их дудку плясать никто не собирается, вернули, хоть и криво.
Читайте также: