Модель кода не сможет обрабатывать включенный файл qt
Есть вопрос не для новичков
я написал функцию которая содаёт динамически ДатаТайбл, но я определяю зарание известный класс, она.
Как реализовать приложение для тестирования (вопрос/ответ)
Всем привет, я пока что андроид лузер, начал писать програмку с тестами так как тестов планируется.
Ответ на вопрос
Блин препод задал вопрос не знаю как ответить на него и почему такой ответ? вот вопрос: Какой.
Ответ на вопрос.
Вот задали мне с информатики написать програмку на паскале, чтобы она задавала вопрос, и.
Кириллица в ваших приложениях
Предположим у нас есть вот такая форма:
Нам бы хотелось что бы форма содержала кириллицу, первое что приходит в голову это добавить в проект сл код:
Добавили, компилируем, получаем:
согласитесь не красиво как-то, решается данная проблема сл способом: в функцию main (файл main.cpp) добавляем следующий код:
Естественно UTF-8 вы можете заменить на CP-1251 или любую другую необходимую вам кодировку
Не забываем так же подключить заголовочный файл:
То что нам и хотелось, но если в будущем мы захотим наше приложение перевести на др языки, то надо еще немного подкорректировать код, т.е. весь текст который вы планируете переводить на др языки стоит обернуть функцией tr() было так:
Этим вы только упростите себе в будущем жизнь
Вот в этом архиве проект который расписан в данном вопросе: Cyrillic.rar
CheckListBox
В Qt нет столь замечательного виджета как CheckListBox, но не все так плохо как кажется, данный вопрос решается достаточно быстро и легко, для этого на форму добавляем виджет QListWidget. Теперь в конструктор формы с QListWidget добавим сл код:
В результате получаем вот это:
В результате получаем вот это:
что на мой взгляд немного удобнее
Перевод приложений на другие языки
И вот вы написали свое первое приложение и вы осознали что научить "разговаривать" приложение на других языках было бы очень хорошо, для это в Qt есть все необходимое. Если у вас установлен QtSDK то вы в полной боевой готовности, если же нет, то для решения данного вопроса вам понадобится два приложения QtCreator и QtLinguist. Будем считать что эти два приложения у вас установлены. Для примера я сделал приложение вот с такой формой:
Как видим все не по-нашенски, учим приложение великому и могучему, для этого в файл *.pro добавляем строчку
translateapp - имя файла перевода с которым будем в дальнейшем работать
ru_RU - идентификатор языка, желательно указывать его в виде (ru_RU, en_EN, by_BY) и т.д.
ts - расширение файла перевода
Добавить эту строку можно в конец файла, роли это не играет.
Теперь делаем следующее в QtCreator-e идем по пути Инструменты - Внешние - Linguist - Обновить перевод (lupdate) на англ это Update Translations (lupdate)
а в каталоге где лежат исходники появится файлик translateapp_ru_RU.ts.Имейте ввиду что в файл попадут только те строки из исходников, которые вы обернули функцией tr(). Теперь открываем приложение QtLinguist и в нем открываем только что сформированный файл получим что то подобное:
Думаю разобраться что, куда и как писать не составит труда, поэтом просто переводим приложение на необходимый язык, не забываем после перевода каждой строчки помечать ее переведенной, для это жмем кнопку на панели инструментов:
После того как перевели все строки сохраняем изменения в файле и делаем следующее: File- Release
В результате получаем файл: translateapp_ru_RU.qm находящийся рядом с файлом translateapp_ru_RU.ts. После перевода в QtLinguist файл с расширением qm можно получить и из QtCreator, для этого идем: Инструменты - Внешние - Linguist - Release Translations(lrelease)
Теперь давайте научим наше приложение использовать полученный файл, для этого скопируйте этот файл (*.qm) в каталог где у вас собирается приложение (Помните про теневую сборку?) после этого в функцию main добавим следующий код:
методу load передается имя файла перевода, который надо загрузить, QLocale::system().name() возвращает идентификатор языка, тот самый который мы указывали в имени файла (ru_RU, en_EN, by_BY), a - это экземпляр QApplications. Естественно вы можете расположить файлы перевода(*.qm) куда вам удобнее главное что бы вы могли передать их методу load
Не забываем подключить заголовочный файлы:
в результате после компиляции получим вот это:
Есть небольшие проблемы с тем что ваше приложение при компиляции в debug может не видеть файлы qm не смотря на то что вы положили их куда положено, тут два решения или забить на эту проблему или методу load передавать абсолютный путь к файлу, если же вы компилируете в release то данной проблемы нет.
Архив с тестовым проектом: TranslateApp.rar
Система плагинов для вашего приложения
Вставлю и я свои 5 копеек, расскажу немножко о работе с плагинами (не теми, которые используются QtCreator-ом, а теми, которые dll-кой лежат рядышком с программой и динамически подгружаются в приложение).
Для начала, создадим интерфейс для нашего плагина:
Здесь всё вроде бы понятно и просто: создаём интерфейс, с функцией "старт" - которая вернёт результат выполнения нашего модуля, и две функции, что бы понять, с чем же мы всё таки работаем, а именно: получение имени нашего плагина и получение версии плагина.
после объявления класса идёт объявление этого класса как интерфейса для плагина:
Здесь мы передаём первым параметром имя нашего интерфейса, а вторым ставим уникальную строку, с помощью которой будет идентифицироваться наш интерфейс.
поехали дальше, реализовываем наш плагин. Для этого - создаём в солюшене проект, который на выходе нам даст динамическую библиотеку (как это делать, рассказывать не буду - звыняйте, лень. ) и добавляем в неё класс (в данном случае это будет FTP сервер):
здесь думаю то же всё предельно ясно и просто (на интерфейс IFtpServer - не обращайте внимание, это я как всегда коммерческими тайнами разбрасываюсь).Основное внимание уделяем тому, что сразу после объявления класса идёт два макроса:
без запятых, точек с запятой и прочих разделителей, просто макросы! про Q_OBJECT - думаю всё понятно, а вот в Q_INTERFACES нужно передать имя интерфейса, который будет реализован в нашем плагине, в данном примере - это IModule.
Реализация проста и тривиальна, весь код приводить не буду, вот кусочек:
ftpServer.cpp
Единственное, что отличает этот "плагинистый" срр файл, от обыкновенного, это то, что после includе-ов идёт макрос:
которым мы говорим, что требуется экспортировать наш плагин и в качестве параметра передаём имя конкретной реализации нашего интерфейса, в данном случае это имя класса: sxFtpServer.
В принципе и всё - наш плагин готов к работе! компилируем и получаем на выходе dll-ку с плагином.
Теперь было бы логично использовать наш плагин. Для этого создаём ещё один проект, который из себя будет представлять консольное приложение. и в main файл или ещё куда добавляем что-то типа:
из Main-а или ещё откуда небудь вызываем нашу волшебную функцию и получаем проект, который будет загружать плагин и вызывать его start функцию.
В общем то и всё. для пущей важности добавлю наверное скриншот:
Да и последнее и очень важное: проект плагина и программы которая его вызывает должн, нет да же не так: ДОЛЖНЫ быть скомпилированы в одной конфигурации (либо оба в Debug-e либо оба в Release) иначе - работать не будет.
Собственно и всё, спасибо за внимание.
Критика и спасибки - приветствуются
если ругаеться на макрос
Работаем с файлом ресурсов в QtCreator
Большинство приложений содержит в себе различного рода "дополнительны материал" в виде картинок звуков и т.п. Зачастую этот материал "вшит" в само приложение, хотя не исключаю и того что данный материал может лежать где то в директории приложения. Сейчас и разберем как "вшить" в свое приложение этот самый материал, и самое главное как им пользоваться в коде.
Для начала добавить в свой проект файл ресурсов Qt, для этого на проекте щёлкаем правой кнопкой мыши и выбираем пункт: "Добавить новый. ":
в появившемся мастере выбираем Qt и файл ресурсов Qt:
затем указываем расположение и имя файла:
расположение лучше всего указывать корень каталога проекта.
Жмём далее, указываем в какой проект добавить новый файл и завершаем мастер нажатием кнопки "Завершить":
В результате в проекте появится файл с расширением qrc, данный файл автоматически будет добавлен в pro файл проекта, поэтому имейте ввиду что если вы добавили ранее созданный файл ресурсов, то его надо подключить в файле проекта:
Как видим он пустой, прежде чем добавлять файлы, скопируйте их в каталог в котором расположен ваш проект, при этом файлы эти могу быть катализированы как вам угодно, например картинки вы можете положить в папку img, звуки в sounds и т.д. после того как все необходимое скопировали давайте добавим файлы в файл ресурсов. Для этого жмем кнопку "Добавить" и выбираем пункт "Добавить префикс":
префикс лучше всего выставлять как "/" дабы избежать длинных путей при работе с ресурсами в коде.
После того как добавили префикс, добавьте необходимые файлы, выбрав пункт "Добавить файлы", добавлять можно сразу выделив n-e количество файлов, в результате добавления у вас получится что то подобное:
Заметьте что в файл ресурсов указывается относительный путь к добавленному файлу, именно с ним вы и будете работать в дальнейшем, так же есть возможность указать "Псевдоним" файлу, это дает возможность обращаться к файлу указав только "Псевдоним", например: вы добавили файл "/img/log.jpg" если ему указать "Псевдоним" например "logo" то из кода можно обращаться к файлу по псевдониму. После всех внесенных файлов сохраните файл ресурсов (Ctrl + S) и приступим к работе с добавленными файлами.
Например поместим на кнопку иконку ранее добавленную в файл ресурсов, для этого переходим в сво-ва кнопку, ищем свойство "icon" открываем окно добавления ресурса:
в левой части окна выбирайте подкаталог где лежит ресурс (если он есть) справа будет отображаться ресурсы:
Если ресурсу задан "Псевдоним" то ресурс будет находится в <resource root>, хотя физически он будет там куда вы его положили. В правой части выбираем необходимое изображение и жмем Ок. Таким образом добавляются ресурсы с помощью GUI, через код это делается так:
например добавляем картинку в Label.
Все ресурсы хранятся в памяти в виде дерева объектов, если вам необходимо пройтись по всему дереву, то для этого можно использовать QDir инициализированный строкой ":/".
Если у вас есть двоичный файл ресурсов (расширение файла rcc), то его необходимо зарегистрировать в приложении:
Читайте также: