1 // Простейшее приложение Qt4 (пустое окно) 2 3 #include <QApplication> 4 #include <QMainWindow> 5 6 int main(int argc, char *argv[]) { 7 8 QApplication app(argc, argv); 9 10 QMainWindow *mw = new QMainWindow(0, Qt::Window); 11 mw->setWindowTitle("Hello Qt4"); 12 mw->resize(400, 300); 13 mw->show(); 14 15 return app.exec(); 16 }Пояснения к программе:
QApplication
(приложение) и
QMainWindow
(главное окно).
main
с аргументами командной строки.
QApplication
(приложение), передав конструктору параметры командной строки, которые,
возможно, указаны при запуске программы (argc
-- число
параметров, argv
-- указатель на массив строковых значений).
Qt::Windows
означает, что элемент будет выглядеть, как
окно приложения, т.е. будет иметь строку заголовка с системными кнопками для
сворачивания на панель задач, закрытия и т.д.).
Перед компиляцией программы надо сначала создать проект Qt (файл с
расширением .pro), для этого требуется войти в тот каталог, в котором
находится cpp-файл с исходным текстом, и запустить утилиту qmake с
параметром -project
. Имя cpp-файла можно не указывать. По умолчанию
имя файла проекта будет совпадать с названием каталога, в котором происходит
сборка программы. Для задания другого имени pro-файла при вызове qmake
надо указать параметр -o
. Например, для нашего первого проекта
будет создан файл 00.pro следующего содержания:
TEMPLATE = app TARGET = 00 DEPENDPATH += . INCLUDEPATH += . # Input SOURCES += 00.cppПосле создания pro-файла можно сгенерировать make-файл, для чего достаточно запустить утилиту qmake ещё раз, но уже без указания каких-либо ключей (или задать параметр
-makefile ФайлПроекта.pro
). Только после этого можно начинать
компиляцию с помощью обычной команды mingw32-make (в случае использования
компилятора MinGW), nmake (для Microsoft~C++), make (для g++ в
Linux) и т.п. При этом можно явно указать имя make-файла, для этого все
перечисленные компиляторы распознают ключ -f
. Поскольку в процессе
разработки программу приходится много раз перекомпилировать, вышеописанный
процесс лучше всего проводить с помощью командного файла build.cmd.
Например, в системе Windows: 1 qmake -project -o 00.pro 00.cpp 2 qmake -makefile 00.pro 3 4 rem mingw32-make -f Makefile.Debug 5 mingw32-make -f Makefile.Release 6 7 pause
Теперь, как и обещали, обсудим вопрос о символах кириллицы. Библиотека Qt
предлагает несколько решений для национальных алфавитов, отличных от стандартной
латиницы. Первый вариант -- использовать функцию
QString::fromLocal8Bit
. Дело в том, что для работы со строковыми
значениями в Qt имеется класс QString
, который оперирует
двухбайтными символами Unicode. Для преобразования обычных строк с однобайтными
символами к типу QString
как раз и предназначен метод
fromLocal8Bit
. При этом используется системная кодировка (в Windows
--- cp1251, в Linux -- обычно koi8-r).
Недостаток данного варианта заключается в том, что если программа, например, разрабатывалась в системе Windows, а затем мы захотели скомпилировать её исходные тексты в Linux, где используется другая кодовая таблица для символов кириллицы, то предварительно придётся осуществить перекодировку исходных текстов, иначе после компиляции все русские сообщения окажутся нечитаемыми.
Изменённый текст нашей первой программы приведён в листинге 2, а внешний вид окна в системе Linux для двух разных тем рабочего стола показан на рис.
1 // Простейшее приложение Qt4 (пустой фрейм) 2 // Вариант с кириллицей в заголовке 3 4 #include <QApplication> 5 #include <QMainWindow> 6 7 int main(int argc, char *argv[]) { 8 9 QApplication app(argc, argv); 10 11 QMainWindow *mw = new QMainWindow(0, Qt::Window); 12 mw->setWindowTitle(QString::fromLocal8Bit("Пустое окно Qt4")); 13 mw->resize(400, 300); 14 mw->show(); 15 16 return app.exec(); 17 }
Второй вариант работы с символами кириллицы -- явное использование
кодеков (специальных объектов для перекодировки строк). Соответствующий
класс QTextCodec
определён в заголовочном файле с тем же именем
(без расширения! Заголовочные файлы с расширением .h
используются
только в старых проектах Qt3). При создании кодека надо указать название
используемой кодовой таблицы, например:
QTextCodec *codec = QTextCodec::codecForName("CP1251");Затем надо связать этот кодек со всеми строками C++:
QTextCodec::setCodecForCStrings(codec);Поскольку при создании кодека указана конкретная кодовая таблица, то исход компиляции исходных текстов не зависит от системной кодировки той платформы, на которой производится сборка программы: результат будет везде одним и тем же. Но файлы с исходными текстами программ в этом случае нельзя подвергать перекодировке (или после перекодировки требуется изменить название кодовой таблицы, заданной при создании кодека). В листинге 3 приведён новый вариант нашей программы.
1 // Простейшее приложение Qt4 (пустой фрейм) 2 // Кодеки 3 4 #include <QApplication> 5 #include <QMainWindow> 6 #include <QTextCodec> 7 8 int main(int argc, char *argv[]) { 9 10 QApplication app(argc, argv); 11 12 QTextCodec *codec = QTextCodec::codecForName("CP1251"); 13 QTextCodec::setCodecForCStrings(codec); 14 15 QMainWindow *mw = new QMainWindow(0, Qt::Window); 16 mw->setWindowTitle("Пустое окно Qt4"); 17 mw->resize(400, 300); 18 mw->show(); 19 20 return app.exec(); 21 }Наконец, третий (наиболее предпочтительный) метод работы с символами национальных алфавитов связан с использованием специальной функции перевода
tr
, с помощью которой осуществляется интернационализация
приложений. Подробнее этот вопрос мы обсудим позже, а пока договоримся все
строковые константы, указанные в тексте программы, передавать в качестве
параметра функции tr
. Эта статическая функция является членом всех
классов Qt, порождённых от базового класса QObject
, но если, как
сейчас, мы собираемся вызвать её в главной программе, а не в каком-либо методе
класса, то приходится указывать какой-нибудь подходящий объект, например,
QObject::tr
. Для указания кодировки, используемой функцией
перевода, надо создать соответствующий кодек и передать его в качестве аргумента
методу setCodecForTr
. Окончательный вариант нашей программы показан
в листинге 4.
1 // Простейшее приложение Qt4 (пустой фрейм) 2 // Кодеки и функция tr() 3 4 #include <QApplication> 5 #include <QMainWindow> 6 #include <QTextCodec> 7 8 int main(int argc, char *argv[]) { 9 10 QApplication app(argc, argv); 11 12 QTextCodec *codec = QTextCodec::codecForName("CP1251"); 13 QTextCodec::setCodecForTr(codec); 14 15 QMainWindow *mw = new QMainWindow(0, Qt::Window); 16 mw->setWindowTitle(QMainWindow::tr("Пустое окно Qt4")); 17 18 mw->resize(400, 300); 19 mw->show(); 20 21 return app.exec(); 22 }Назад Содержание Вперед