...
QString str1 = "Test";
const char *c_str2 = str1.toLocal8Bit().data();
printf("str2: %s", c_str2);
...
Архив метки: qt
Qt: QListWidget deselect all Сбросить выделение
Чтобы сбросить выделение в виджете QListWidget:
ui->listWidgetSelect->clearSelection();
Qt 5: подготовка программы для windows к запуску на других компьютерах
Расскажу, как запустить программу, написанную на C++/Qt для windows, на другом компьютере, где библиотеки Qt 5 не установлены. Вот мы, допустим, установили Qt Creator, создали приложение из одного окна с надписью «Hello World», выбрали для сборки конфигурацию «Выпуск» и нажали заветный зелёный треугольник. Через несколько секунд успешно запустится наша программа. Находим, где же программа лежит. Путь к ней будет примерно такой: D:\…Projects\2013-09-30_HelloWorld\build-HelloWorld-Desktop_Qt_5_2_0_MinGW_32bit-Выпуск\release\HelloWorld.exe. Радоваться рано. Если мы закроем Qt Creator, отправимся по этому пути и попытаемся запустить HelloWorld.exe,то получим следующую ошибку: «Запуск программы не возможен, так как на компьютере отсутствует Qt5Core.dll. Попробуйте переустановить программу.» Точно такая же ошибка возникнет на любом другом компьютере, где мы попытаемся запустить эту программу. Варианты решения:
1. Пересобрать сам Qt, чтобы собранные приложения статически линковались с библиотеками Qt 5 — долго, сложно, программа будет тяжёлая, и заморочки с лицензированием
2. Устанавливать на все компьютеры, где будем использовать программу, библиотеки Qt 5, совместимые с нашей сборкой, и прописывать путь к ним в системной переменной PATH
3. Сложить все необходимые DLL-библиотеки в одну папку с экзешником нашей программы. Получится по сути Portable-версия, которую можно будет хоть с флэшки запускать. Этот способ самый простой, им и воспользуемся.
Порядок следующий:
1. Копируем программу в отдельную папку
2. Запускаем, смотрим имя файла в тексте ошибки
3. Находим этот DLL-файл в папке C:\Qt\Qt5.2.0\5.2.0\mingw48_32\bin и копируем его рядом с экзешником
4. Возвращаемся к пункту 2 и повторяем до тех пор, пока программа не запустится.
Итого у меня по минимуму получился следующий список DLL-библиотек для Qt 5.2:
- icudt51.dll
- icuin51.dll
- icuuc51.dll
- libgcc_s_dw2-1.dll
- libstdc++-6.dll
- libwinpthread-1.dll
- Qt5Core.dll
- Qt5Gui.dll
- Qt5Widgets.dll
- HelloWorld.exe
Всего размер папки получился 42 Мб, вроде как бы многовато для простого Hello World. Кого это не смущает — уже могут делиться своей программой. А я расскажу теперь, как сократить этот объём хотя бы до 16 Мб, не сильно сложно (для сравнения библиотеки Qt4 от известной программы для хранения паролей KeePassX весят 10 Мб). Библиотеки и программу мы будем просто сжимать бесплатным свободным упаковщиком UPX. Порядок действий:
- Качаем программу UPX — версию для windows
- Распаковываем скаченный архив
- Возвращаемся к нашим DLL-файлам, щёлкаем по каждому правой кнопкой, выбираем «Открыть с помощью» — upx.exe
Вот теперь папка с нашей программой весит 16 Мб, и её содержимое можно спокойно запускать на других компьютерах.
Как вырезать кусок из QPixmap
Вырезаем QPixmap по рамке x, y, ширина, высота (в пикселях)
QPixmap::copy(int x, int y, int width, int height)
Qt: UTF8 в CP1251 и CP1251 в UTF8
Вовремя пригодилась статья: [Qt] UTF в 1251 и 1251 в UTF. Как раз занимался расшифровкой дампа базы данных main.db от телефона Motorola A1200 (формат базы данных — BerkleyDB4). Самый полезный кусок кода:
QByteArray msg = QByteArray::fromHex("cde5eff0e0e2e8ebfcedeee520f1eeeee1f9e5ede8e5204b4f4e5f544d5f484f53544b4e4620eef220d3cad2d121"); QTextCodec *codec = QTextCodec::codecForName("Windows-1251"); QString strf = codec->toUnicode(msg); qDebug() << strf;
inqlude.org — архив библиотек для QT
Сайт http://inqlude.org — каталог библиотек для разработки на Qt. Библиотеки собраны как стабильные, так и недоделанные (бета, альфа и т.п.). Есть ссылки на платные библиотеки. Авторы проекта inqlude поставили перед собой задачу собрать в одном месте информацию обо всех доступных библиотеках Qt.
Из того, что руки зачесались попробовать:
- diff-match-patch — библиотеки для сравнения и применения патчей к текстовым файлам
- glc-lib — библиотека для 3D-приложений с использованием OpenGL
- lxqt_wallet — защищённое хранилище информации
- qjson — парсер json для Qt
- qt-gstreamer — костыли от Qt к gstreamer
- qtargparser — парсер коммандной строки
- qtffmpegwrapper — обёртка Qt для кодирования и декодирования видео с использованием FFMPEG
- qtweetlib — библиотека для доступа к твиттеру
- quazip -библиотека для работы с zip-архивами
- qxmpp — библиотека для клиента и сервера jabber
- vlc-qt — типа простая библиотека для использования связки с libVLC
Все библиотеки на сайте перечислены с описаниями, ссылкамина исходники и документацию.
QT как открыть файл, который лежит в одной папке с программой
QFilef(qApp->applicationDirPath()+QDir::separator()+"file.txt");
QT как открыть папку пользователя SendTo
QDird(QString(getenv("USERPROFILE"))+"\\AppData\\Roaming\\Microsoft\\Windows\\SendTo");
QT как открыть из программы проводник на нужной папке
QProcess().startDetached("explorerftp://server");
Как открывать файлы и программы из QT программ в Windows
QString path = "c:\\setup.log"; QDesktopServices::openUrl(QUrl::fromLocalFile(path)); Откроется в блокноте указанный файл