Home · All Classes · Main Classes · Grouped Classes · Modules · Functions

Описание Класса QCoreApplication
[модуль QtCore]

Класс QCoreApplication предоставляет обработку сообщений для консольного приложения Qt. Далее...

#include <QCoreApplication>

Наследует QObject.

Наследуется QApplication.

Открытые Типы

Свойства

Открытые Функции

Открытые Слоты

Сигналы

Статические Открытые Члены

Связанные Не-Члены

Макросы

Дополнительные Унаследованные Члены


Подробное Описание

Класс QCoreApplication предоставляет обработку сообщений для консольного приложения Qt.

Этот класс используется для реализации цикла обрабтки сообщений приложениями не предоставляющими GUI. У каждого не-GUI приложения, использующего Qt, должен быть один объект QCoreApplication. Для GUI-приложений, см. QApplication.

QCoreApplication содержит главный цикл обработки сообщений в котором обрабатываются и пересылаются далее все сообщения операционной системы (например, сообщения таймера и сети) и других источников. Также этот класс управляет инициализацией и закрытием приложений инициированных как операционной системой, так и приложениями.

Аргументы коммандной строки переданной QCoreApplication доступны как argc() и argv(). Цикл обработки сообщений начинается с вызова exec(). Доолгие управляющие операции могут вызывать processEvents() для поддержания приложения в состоянии готовности.

Некоторые классы Qt (например, QString) могут использоваться без объекта QCoreApplication. Однака, мы рекомендуем в большинстве случаев создавать объект QCoreApplication или QApplication в Вашей функции main() как можно раньше.

Приложежние имеет applicationDirPath() и applicationFilePath(). Файлы перевода могут быть добавлены или удалены с использованием installTranslator() и removeTranslator(). Строки приложения могут быть переведены с помощью функции translate(). Функция translate() использует функции QObject::tr() и QObject::trUtf8().

Класс предоставляет слот quit() и сигнал aboutToQuit().

Также предоставляется несколько статических функций для удобства. Доступ к объекту QCoreApplication можно получить через instance(). Сообщения можно послать или передать с помощью sendEvent(), postEvent() и sendPostedEvents(). Определенные события могут быть удалены с помощью removePostedEvents() и вызваны с помощью flush(). Путь к библиотеке (см. QLibrary) может быть получен с помощью libraryPaths() и изменен с помощью setLibraryPaths(), addLibraryPath() и removeLibraryPath().

См. также QApplication, QAbstractEventDispatcher и QEventLoop.


Описание Типов Членов

enum QCoreApplication::Encoding

Данный тип перечисления определяет способ шифрования 8-битой символьной строки, переданных в качество аргумента в translate():

КонстантаЗначениеОписание
QCoreApplication::DefaultCodec0Кодировка определенная в QTextCodec::codecForTr() (Если ни один не был установлен, то Latin1)
QCoreApplication::UnicodeUTF81UTF-8

См. также QObject::tr(), QObject::trUtf8() и QString::fromUtf8().

typedef QCoreApplication::EventFilter

Функция, которая может использоваться с фильтром событий, имеет следующее определение:

    bool myEventFilter(void *message, long *result);

См. также setEventFilter().


Описание Свойств

applicationName : QString

Данное свойство хранит имя приложения.

Данное свойство используется классом QSettings при создании его экземпляра с помощью конструктора без параметров. Это избавляет от необходимости задавать это значение каждый раз при создании объекта QSettings.

Функции доступа:

См. также organizationName и organizationDomain.

organizationDomain : QString

Данное свойство хранин интернет-адрес организации написавшей приложение.

Данное свойство используется классом QSettings при создании его экземпляра с помощью конструктора без параметров. Это избавляет от необходимости задавать это значение каждый раз при создании объекта QSettings.

В системах Mac QSettings organizationDomain() использует данное свойство в качестве имени организации (если свойство не содержит пустую строку); в противном случае используется organizationName(). На всех других платформах QSettings использует в качестве имени организации organizationName().

Функции доступа:

См. также organizationName and applicationName.

organizationName : QString

Данное свойство хранит имя организации создавшей приложение.

Данное свойство используется классом QSettings при создании его экземпляра с помощью конструктора без параметров. Это избавляет от необходимости задавать это значение каждый раз при создании объекта QSettings.

В системах Mac QSettings organizationDomain() использует данное свойство в качестве имени организации (если свойство не содержит пустую строку); в противном случае используется organizationName(). На всех других платформах QSettings использует в качестве имени организации organizationName().

Функции доступа:

См. также organizationDomain и applicationName.


Описание Функций-Членов

QCoreApplication::QCoreApplication ( int & argc, char ** argv )

Создает приложение ядра Qt. Приложение ядра - это приложение без графического пользовательского интерфейса. Данный тип приложений используется при работе с консолью или с качестве обслуживающего процесса.

Аргументы argc и argv доступны через функции argc() и argv().

QCoreApplication::~QCoreApplication ()

Разрушает объект QCoreApplication.

void QCoreApplication::aboutToQuit ()   [signal]

Данный сигнал испускается когда приложение сообирается завершить цикл обработки сообщений, например, когда уровень цикла обработки сообщений понижается до нуля. Это может случиться после того как поступит запрос quit() от внутренней части приложения или если пользователь закрывает основное окно.

Этот сигнал особенно полезен, если приложение должно убрать за собой после закрытия. Обратите внимание, что никакое взаимодействие с пользователем в этом состоянии невозможно.

См. также quit().

void QCoreApplication::addLibraryPath ( const QString & path )   [static]

Добавляет path в конец списка путей к библиотекам. Если path пустой или уже присутствует в списке, то список не изменяется.

По умолчанию список путей содержит единственное значение - путь к директории уставновки плагинов. По умолчанию директория установки равна INSTALL/plugins, где INSTALL - это директория в которой уставновлена Qt.

См. также removeLibraryPath(), libraryPaths() и setLibraryPaths().

QString QCoreApplication::applicationDirPath ()   [static]

Возвращает имя директории, в которой установлено исполняемое приложение.

Например, если Вы установили Qt в директорию C:\Trolltech\Qt и запустили пример regexp, данная функция возвратит "C:/Trolltech/Qt/examples/tools/regexp".

В Mac OS X данная функция укажет на директорию, фактически содержащую выполняемый файл, который может находиться внутри связки приложений (если приложение связано).

Внимание: В Unix данная функция предполагает, что argv[0] содержит имя исполняемого файла (как это обычно и происходит). Также предполагается, что текущая директория не была изменена приложением.

См. также applicationFilePath().

QString QCoreApplication::applicationFilePath ()   [static]

Возвращает путь к исполняемому файлу приложения.

Например, если Вы установили Qt в директорию /usr/local/qt и запустили пример regexp, то данная функцию возвратит "/usr/local/qt/examples/tools/regexp/regexp".

Внимание: В Unix данная функция предполагает, что argv[0] содержит имя исполняемого файла (как это обычно и происходит). Также предполагается, что текущая директория не была изменена приложением.

См. также applicationDirPath().

QStringList QCoreApplication::arguments ()   [static]

Возвращает список аргументов командной строки.

arguments().at(0) - это имя программы, arguments().at(1) - это первый аргумент, а arguments().last() - это последний аргумент.

Вызов данной функции занимает продолжительное время. При парсинге командной строки, Вам лучше сохранить результат этой функции в переменной.

Внимание: В Unix этот список создается из параметров argc и argv, переданных в функцию main(). Строки в argv интерпретируются с помощью QString::fromLocal8Bit(); в результате, нет возможности разобрать, например, японские аргументы командной строки в системах, основанных на latin1. Большинство современных Unix-систем не имеют этого ограничения, так как они основаны на Unicode.

В NT-подобных Windows это ограничение также не действует.

Данная функция добавлена Qt 4.1.

bool QCoreApplication::closingDown ()   [static]

Возвращает true если объект приложения разрушается; в противном случае возвращает false.

См. также startingUp().

int QCoreApplication::exec ()   [static]

Запускает основной цикл обработки сообщений и ждет вызова exit(). Возвращает значение установленное в exit() (значение равно 0 если exit() вызвано через quit()).

Данную функцию необходимо вызвать для начала обработки сообщений. Основной цикл обработки сообщений получает сообщения от оконной системы и перенаправляет их виджетам приложения.

Чтобы заставить приложение выполнять какие-либо действия в отсутствие сообщений используют QTimer с интервалом равным 0. Более продвинутые схемы обработки ожидания создают с использованием processEvents().

См. также quit(), exit(), processEvents() и QApplication::exec().

void QCoreApplication::exit ( int returnCode = 0 )   [static]

Посылает сообщение о выходе с нужным возвращаемым кодом.

После вызова этой функции приложение покидает главный цикл обработки сообщений и завершает функцию exec(). Функция exec() возвращает returnCode.

В соответствии с соглашением returnCode равный 0 говорит об успешном завершении, а отличный от 0 указывает на ошибку.

Обратите внимание, что в отличие от библиотечной функции C с таким же тазванием, эта функция передает управление вызывающему -- останавливается обработчик событий.

См. также quit() и exec().

bool QCoreApplication::filterEvent ( void * message, long * result )

Посылает сообщение message в фильтр сообщений установленный с помощью setEventFilter(). Если фильтр сообщений не был установлен, данная функция возвращает false; в противном случае данная функция возвращает результат работы функции фильтр, который установливается в параметр result.

См. также setEventFilter().

void QCoreApplication::flush ()   [static]

Обрабатывает специфические для платформы события.

Если Вы делаете графические изменения в цикле и не передаете управление циклу обработки сообщений на асинхронных оконных системах подобных X11 или используете двойную буферизацию подобно Mac OS X, и хотите визуализировать эти изменения немедленно (например, Splash Screens), вызывайте эту функцию.

См. также sendPostedEvents().

bool QCoreApplication::hasPendingEvents ()   [static]

Данная функция возвращает true если в очереди есть события; в противном случае возвращает false. События в очереди могут быть посланы системой или другими частями приложения с использованием postEvent().

См. также QAbstractEventDispatcher::hasPendingEvents().

void QCoreApplication::installTranslator ( QTranslator * messageFile )   [static]

Добавляет файл сообщений messageFile к списку файлов сообщений используемых для перевода.

Может быть установлено несколько файлов сообщений. Переводчик сперва ищет в последнем установленном файле, затем в предпоследнем и т.д. до первого файла. Поиск останавливается как только переводимое сообщение будет найдено.

См. также removeTranslator(), translate() и QTranslator::load().

QCoreApplication * QCoreApplication::instance ()   [static]

Возвращает указатель на приложение QCoreApplication (или QApplication).

QStringList QCoreApplication::libraryPaths ()   [static]

Возвращает список путей, которые приложение будет использовать при загрузке динамических библиотек. Если никакие пути установлены не были, тогда единственным значение в списке будет директория установки плагинов. По умолчанию директория установки плагинов - это INSTALL/plugins, где INSTALL - это директория, в которую был установлен Qt. Директория исполняемого файла (а НЕ рабочая директория) также добавляется к пути установки плагинов, как отделенная двоеточием часть переменной окружения QT_PLUGIN_PATH.

Если Вы хотите перебрать список, то можно воспользоваться псевдоключевым словом foreach:

    foreach (QString path, app.libraryPaths())
        do_something(path);

См. также setLibraryPaths(), addLibraryPath(), removeLibraryPath(), QLibrary и How to Create Qt Plugins.

bool QCoreApplication::notify ( QObject * receiver, QEvent * event )   [virtual]

Посылает сообщение event получателю receiver: receiver->event(event). Возвращает значение возвращенное обработчиком сообщений получателя.

Для некоторых типов событий (например сообщения мыши и клавиатуры) сообщения будут пересылаться родителю получателя и далее до объекта самого верхнего уровня если получатель не заинтересован в событии (т.е. его обработчик возвращает false).

Есть пять различных способов обработки сообщений; переопределение этой виртуальной функции только один из них. Далее следует краткое описание этих подходов:

  1. Повторная реализация paintEvent(), mousePressEvent() и так далее. Это наиболее распространенный, легкий и наименее мощный способ.
  2. Повторная реализация данной функции. Весьма мощное средство позволяющее полностью контролировать процесс, но в один момент может быть активен только один подкласс.
  3. Установка фильтра сообщений для QCoreApplication::instance(). Фильтр сообщений позволяет обрабатывать все сообщения. Данное средство столь же мощно, как перегрузка notify(); кроме того, можно иметь более одного глобального фильтра сообщений приложения. Глобальный фильтр сообщений также видит сообщения мыши для недоступных виджетов.
  4. Повторная реализация QObject::event() (как это делает QWidget). Если Вы реализуете этот подход, то получаете возможность отслеживать нажатия ключевой клавиши Tab и можете видеть сообщения до того, как они прошли через фильтр сообщений определенный для виджета.
  5. Установка фильтра сообщений на объект. Такой объект позволяет отслеживать все события за исключением нажатия ключевых клавиш Tab и Shift-Tab.

См. также QObject::event() и installEventFilter().

void QCoreApplication::postEvent ( QObject * receiver, QEvent * event )   [static]

Добавляет сообщение event в очередь сообщений объекта-приемника receiver и немедленно возвращает управление.

Сообщение должно быть размещено в куче, т.к. очередь сообщений возьмет его значение и удалит объект сообщения как только сообщение будет послано. Эта функция не гарантирует возможность изменять и удалять сообщение после того, как оно будет послано.

Когда управление возвращается к главному циклу обработки сообщений, все сообщения стоящие в очереди будут посланы с использованием функции notify().

Обратите внимание: Данная функция является потокобезопасной.

См. также sendEvent(), notify() и sendPostedEvent().

void QCoreApplication::processEvents ( QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents )   [static]

Обрабатывает все ожидающие события в соответствии с флагами flags пока не будет исчерпана очередь.

Вы можете вызывать данную функцию в некоторых случаях когда программа выполняет длительное действие (например копирование файла).

См. также exec(), QTimer, QEventLoop::processEvents(), flush() и sendPostedEvents().

void QCoreApplication::processEvents ( QEventLoop::ProcessEventsFlags flags, int maxtime )   [static]

Данная перегруженная функция-член предоставлена для удобства. Ее поведение аналогично поведению вышеприведенной фунции.

Обрабатывает ожидающие сообщения в течение maxtime миллисекунд или меньше, если не больше событий.

Вы можете вызывать данную функцию в некоторых случаях когда программа выполняет длительное действие (например копирование файла).

См. также exec(), QTimer и QEventLoop::processEvents().

void QCoreApplication::quit ()   [static slot]

Сообщает, что приложение завершило свою работу и возвратило код 0 (успешное завершение). Эквивалентно вызову QCoreApplication::exit(0).

Обычно соединяют сигнал QApplication::lastWindowClosed() с quit(), также часто соединяют, например, QAbstractButton::clicked() или сигналы в QAction, QMenu или QMenuBar с данный слотом.

Пример:

    QPushButton *quitButton = new QPushButton("Quit");
    connect(quitButton, SIGNAL(clicked()), &app, SLOT(quit()));

См. также exit(), aboutToQuit() и QApplication::lastWindowClosed().

void QCoreApplication::removeLibraryPath ( const QString & path )   [static]

Удаляет путь path из списка путей к библиотекам. Если path является пустым значением или отсутствует в списке, то список не изменяется.

См. также addLibraryPath(), libraryPaths() и setLibraryPaths().

void QCoreApplication::removePostedEvents ( QObject * receiver )   [static]

Удаляет все сообщения посланные приемнику receiver с помощью postEvent().

События не будут посланы, вместо этого они будут удалены из очереди. Никогда не используйте эту функция. Если Вы все-же вызвали ее, то знайте, что уничножение событий заставляет приемник прерывать один или более инвариантов.

Обратите внимание: Данная функция является потокобезопасной.

void QCoreApplication::removeTranslator ( QTranslator * messageFile )   [static]

Удаляет файл перевода messageFile из списка файлов перевода используемых приложением. (Файл не удаляется из файловой системы.)

См. также installTranslator(), translate() и QObject::tr().

bool QCoreApplication::sendEvent ( QObject * receiver, QEvent * event )   [static]

Посылает сообщение event непосредственно приемнику receiver используя функцию notify(). Возвращает значение возвращенное обработчиком сообщений.

Сообщение не удаляется после отправки. Нормальный подход состоит в том, чтобы создавать сообщения в стеке, например:

    QMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0);
    QApplication::sendEvent(mainWindow, &event);

См. также postEvent() и notify().

void QCoreApplication::sendPostedEvents ( QObject * receiver, int event_type )   [static]

Немедленно посылает события ранее поставленные в очередь приемника receiver функцией QCoreApplication::postEvent() receiver и имеющие тип события event_type.

Обратите внимание, что события оконной системы посылаются не этой функцией, а processEvents().

Если receiver равно null, то посылаются все события с типом event_type всем объектам. Если event_type равно 0, то посылаются все события приемника receiver.

См. также flush() и postEvent().

void QCoreApplication::sendPostedEvents ()   [static]

Данная перегруженная функция-член предоставлена для удобства. Ее поведение аналогично поведению вышеприведенной фунции.

Отправляет все посланные сообщения, т.е. освобождает очередь сообщений.

EventFilter QCoreApplication::setEventFilter ( EventFilter filter )

Устанавливает фильтр сообщений filter. Возвращает указатель на ранее определенную функцию-фильтр.

Фильтр событий - это функция, вызываемая в ответ на получение каждого события из любого потока. Это не относится к сообщениям посланным объекту не поддерживаемым Qt.

Функция возвращает true для остановки обработки сообщения Qt, или false для стандартной обработки сообщения.

Может быть определен только один фильтр сообщений, но фильтр может использовать возвращаемое значение для вызова ранее установленного фильтра. По умолчанию фильтр не установлен (т.е. функция возвращает 0).

См. также installEventFilter().

void QCoreApplication::setLibraryPaths ( const QStringList & paths )   [static]

Устанавливает в качестве списка директорий в которых будут искаться подключаемые библиотеки paths. Все ранее установленные пути будут удалены и список путей будет состоять только из строк включенных в paths.

См. также libraryPaths(), addLibraryPath(), removeLibraryPath() и QLibrary.

bool QCoreApplication::startingUp ()   [static]

Возвращает true если объект приложения не был создан; в противном случае возвращает false.

См. также closingDown().

QString QCoreApplication::translate ( const char * context, const char * sourceText, const char * comment = 0, Encoding encoding = DefaultCodec )   [static]

Возвращает перевод текста sourceText, который ищет в ранее установленных файлах перевода. Перевод ищется начиная с наиболее поздно установленного файла переводов назад к первому установленному.

QObject::tr() и QObject::trUtf8() предоставляют аналогичные возможности в более удобной форме.

context - название класса (например, "MyDialog"), sourceText - либо английский текст или короткий текст идентификации, если перевод очень длинен (как в справочной системе).

comment - снимающий неоднозначность комментарий, когда один и тот-же текст sourceText используется в разных ролях в пределах одного контекста. По умолчанию равно null. encoding 8-битный индикатор кодировки строки символов.

Для получения более подробной информации о contexts и comments, см. QTranslator.

Если ни один из установленных файлов перевода не содержит перевод для sourceText в context, данная функция возвращает объект QString эквивалентный sourceText. Кодировкаf sourceText определяется encoding; по умолчанию - DefaultCodec.

Данная функция не является виртуальной. Для реализации альтернативной технологии перевода, Вы можете создать подкласс QTranslator.

Внимание: Данный механизм работает только если файлы перевода были установлены до вызова этого метода. Установка и удаление файлов перевода в процессе перевода не поддерживается. Несоблюдение этого правила может закончится аварией или другими неожиданными действиями программы.

Обратите внимание: Данная функция является монопоточной.

См. также QObject::tr(), installTranslator() и QTextCodec::codecForTr().

bool QCoreApplication::winEventFilter ( MSG * msg, long * result )   [virtual]

Эта функция вызывается при получении каждого сообщения. Осуществите повторно реализацию данной функции если Вы хотите обрабатывать сообщения оконной системы msg, необработанные Qt. Если Вы не хотите, чтобы сообщение было обработано Qt, возвратите true и установите result в значение, которой должна вернуть оконная процедура. В противном случае возвратите false.


Связанные Не-Члены

void qAddPostRoutine ( QtCleanUpFunction ptr )

Добавляет глобальную функцию, которая будет использоваться в деструкторе объекта QApplication. Данную функцию обычно используют для дообавления уборки мусора для программных расширений после завершения работы.

Функция указанная в ptr не должна принимать никаких аргументов и не должна ничего возвращать. Например:

    static int *global_ptr = 0;

    static void cleanup_ptr()
    {
        delete [] global_ptr;
        global_ptr = 0;
    }

    void init_ptr()
    {
        global_ptr = new int[100];      // allocate data
        qAddPostRoutine(cleanup_ptr);   // delete later
    }

Обратите внимание, что для уборки за расширением приложения или модуля функция qAddPostRoutine() не всегда подходит. Например, если программа разделена не несколько динамически подключаемых модулей, нужный модуль может быть выгружен намного раньше, чем вызывается деструктор QApplication.

Использование счетчиков ссылок для модулей и подключаемых библиотек и механизма родительских и дочерних объектов Qt может быть намного удобнее. Вот пример класса, который использует механизм родительских и дочерних объектов для вызова функции уборки в нужное время:

    class MyPrivateInitStuff : public QObject
    {
    public:
        static MyPrivateInitStuff *initStuff(QObject *parent)
        {
            if (!p)
                p = new MyPrivateInitStuff(parent);
            return p;
        }

        ~MyPrivateInitStuff()
        {
            // здесь производится уборка
        }

    private:
        MyPrivateInitStuff(QObject *parent)
            : QObject(parent)
        {
            // здесь производится инициализация
        }

        MyPrivateInitStuff *p;
    };

Правильно выбрав родительский объект часто можно решить проблему уборки данных модуля точно в нужный момент.


Описание Макросов

Q_DECLARE_TR_FUNCTIONS ( context )

Макрос Q_DECLARE_TR_FUNCTIONS() - это декларация и реализация двух функций: tr() и trUtf8(), следующим образом:

    static inline QString tr(const char *sourceText,
                             const char *comment = 0);
    static inline QString trUtf8(const char *sourceText,
                                 const char *comment = 0);

Данный макрос удобен, если Вы хотите использовать функцию QObject::tr() или QObject::trUtf8() в классе, не являющемся наследником QObject.

Q_DECLARE_TR_FUNCTIONS() должен быть размещен в самом верху определения класса (до самого первого оператора public: или protected:). Например:

    class MyMfcView : public CView
    {
        Q_DECLARE_TR_FUNCTIONS(MyMfcView)

    public:
        MyMfcView();
        ...
    };

Параметр context, обычно, является именем класса.

См. также Q_OBJECT, QObject::tr() и QObject::trUtf8().


Copyright © 2005 Trolltech Trademarks
Qt 4.1.0
Hosted by uCoz