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

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

Класс QObject является базовым классом для всех объектов Qt. Далее...

#include <QObject>

Наследуется: Q3Accel, Q3Action, Q3Canvas, Q3Dns, Q3DragObject, Q3EditorFactory, Q3FileIconProvider, Q3NetworkOperation, Q3NetworkProtocol, Q3Process, Q3ServerSocket, Q3Signal, Q3SqlForm, Q3StyleSheet, Q3UrlOperator, Q3WhatsThis, QAbstractEventDispatcher, QAbstractItemDelegate, QAbstractItemModel, QAbstractTextDocumentLayout, QAccessibleBridgePlugin, QAccessiblePlugin, QAction, QActionGroup, QAssistantClient, QAxFactory, QAxObject, QAxScript, QAxScriptManager, QButtonGroup, QClipboard, QCopChannel, QCoreApplication, QDecorationPlugin, QDesignerFormEditorInterface, QDesignerFormWindowManagerInterface, QDirectPainter, QDrag, QEventLoop, QExtensionFactory, QExtensionManager, QFtp, QHttp, QIconEnginePlugin, QImageIOPlugin, QInputContext, QInputContextPlugin, QIODevice, QItemSelectionModel, QKbdDriverPlugin, QLayout, QLibrary, QMimeData, QMouseDriverPlugin, QMovie, QObjectCleanupHandler, QPictureFormatPlugin, QPluginLoader, QScreenDriverPlugin, QSessionManager, QSettings, QShortcut, QSignalMapper, QSignalSpy, QSocketNotifier, QSound, QSqlDriver, QSqlDriverPlugin, QStyle, QStylePlugin, QSvgRenderer, QSyntaxHighlighter, QTcpServer, QTextCodecPlugin, QTextDocument, QTextObject, QThread, QTimer, QTranslator, QUiLoader, QValidator, QWidget, QWSInputMethod и QWSServer.

Обратите внимание: все функции данного класса не являются потокобезопасными за исключением connect(), connect(), disconnect() и disconnect().

Свойства

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

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

Сигналы

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

Защищенные Функции

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

Макросы


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

Класс QObject является базовым классом для всех объектов Qt.

QObject - это сердцевина модели объектов Qt. Главная особенность этой модели - это очень мощный механизм для связи объектов, навываемый сигналами и слотами. Вы можете установить связь сигнала со слотом с помощью connect() и разорвать такую связь с помощью disconnect(). Во избежание возникновения бесконечных цепочек вызовов можно вызвать blockSignals(). Защищенные функции connectNotify() и disconnectNotify() позволяют отследить установленные соединения.

QObject поддерживают информацию о дереве дочерних объектов. Когда Вы создаете QObject в качестве родителя другого объекта, то объект автоматически добавит себя в список дочерних объектов children(). Родитель принимает в собственность свои дочерние объекты, т.е. дочерние объекты будут автоматически удалены в деструкторе объекта-родителя. Вы можете найти дочерний объект по имени и типу используя findChild() или findChildren().

Каждый объект знает свой objectName(), а имя его класса можно получить с помощью metaObject() (см. QMetaObject::className()). Вы можете определить является ли класс наследником другого класса в иерархии наследования QObject с помощью функции inherits().

Когда объект разрушается, он генерирует сигнал destroyed(). Вы можете перехватить этот сигнал и таким образом избежать повисших ссылок на QObjects. Класс QPointer предоставляет удобную реализацию этой возможности.

QObject могут получать события от других объектов через event() и фильтр событий. Для получения более подробной информации смотрите installEventFilter() и eventFilter(). Для удобства можно переопределить childEvent() позволяющую перехватывать события от дочерних объектов. События ставятся в потоки, в которых объект был создан; для более детальной информации смотрите Поддержка Потоков в Qt и thread().

QObject осуществляет поддержку таймера Qt; для получения информации о высокоуровневой поддержке таймера смотрите QTimer.

Обратите внимание, что макрос Q_OBJECT обязателен для любого объекта, поддерживающего сигналы, слоты и свойства. Вы также должны управлять Meta Object Compiler (MOC) в исходном файле. Мы настоянельно рекомендуем использовать этот макрос во всех классах наследующих QObject независимо от того, действительно ли они используют сигналы, слоты и свойства, так как в противном случае некоторые функции могут вести себя неправильно.

Все виджеты Qt наследуют QObject. С помощью функции isWidgetType() можно узнать, дейтвительлно ли объект является виджетом. Это работает намного быстрее, чем qobject_cast<QWidget>(obj) или obj->inherits("QWidget").

Некоторые функции QObject, такие как children(), возвращают QObjectList. QObjectList - переименование типа для QList<QObject *>.

См. также QMetaObject, QPointer, QObjectCleanupHandler и Object Trees and Object Ownership.


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

objectName : QString

Данное свойство содержит имя объекта.

Вы можете найти объект по имени (и типу) использовав findChild(). Вы можете получить набор объектов использовав findChildren().

    qDebug("MyClass::setPrecision(): (%s) invalid precision %f",
           qPrintable(objectName()), newPrecision);

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

См: также metaObject() и QMetaObject::className().


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

QObject::QObject ( QObject * parent = 0 )

Создает объект с объектом-родителем parent.

Родитель объекта может быть доступен, как владелец объекта. Например, dialog box - родитель по отношению к кнопкам OK и Cancel которые он содержит.

Все дочерние объекты разрушаются в деструкторе объекта-родителя.

Установка parent в 0 создает объект без родителя. Если объект - это виджет, он будет окном верхнего уровня.

См. также parent(), findChild() и findChildren().

QObject::~QObject ()   [virtual]

Destroys the object, deleting all its child objects.

Все связи сигналов объекта автоматически разрываются.

Предупреждение: Все дочерние объекты будут уничтожены. Если какие либо из этих объектов глобальный или содержится в стеке, рано или поздно Ваша программа потерпит крах. Мы не рекомендуем держать ссылки на дочерние объекты снаружи родителя. Если Вы выполняете деструктор, то сигнал destroyed() дает возможность обнаружить момент разрушения объекта.

Предупреждение: Удаление QObject ожидающего событий может привести к краху. Вы не должны удалять QObject напрямую, если он расположен в потоке, отличном от выполняющегося в данный момент. Используйте вместо этого метод deleteLater() который заставляет уничножить объект после того, как все ожидаемые объектом события будут ему предоставлены.

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

bool QObject::blockSignals ( bool block )

Блокирует сигналы если block равен true или разблокирует если block равен false.

Если сигналы разблокированы, то они уходят в никуда. Обратите внимение, что сигнал destroyed() будет испускаться даже у заблокированного объекта.

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

void QObject::childEvent ( QChildEvent * event )   [virtual protected]

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

События QEvent::ChildAdded и QEvent::ChildRemoved посылаются объектам, когда добавляются или удалятся дочерние объекты. В обоих случаях следует полагаться на дочерние объекты являющиеся потомками QObject или если isWidgetType() возвращает истину или если объект является QWidget. (Это потому, что ChildAdded может быть инициирован когда дочерний объект еще не до конца построен, а ChildRemoved инициируется когда объект может быть уже разрушен).

Событие QEvent::ChildPolished посылается виджету когда дочерний объект создан до конца или когда созданный объект добавляется. Если Вы получаете дочерний объект через это событие, значит, дочерний объект полностью построен.

Для каждого дочернего виджета генерируется одно событие ChildAdded, ноль или больше событий ChildPolished и одно событие ChildRemoved.

Событие ChildPolished будет опущено, если дочерний объект удален немедленно после того как был добавлен. Если дочерний объект "полирован&qout; несколько раз, вы можете получить несколько событий от дочерних объектов каждый раз с различной виртуальной таблицей.

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

const QObjectList & QObject::children () const

Возвращает список дочерних объектов. Класс QObjectList определен в заголовочном файле <QObject> следующим образом:

    typedef QList<QObject*> QObjectList;

Первый добавленный дочерний объект - первый объект списка, а последний - последний объект в списке, т.е. новые дочерние объекты добавляются в конец списка.

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

См. также findChild(), findChildren(), parent() и setParent().

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoCompatConnection )   [static]

Создает соединение типа type сигнала signal объекта sender с методом method в объекте receiver. При успешном выполнении возвращает true; в противном случае - false.

Вы должны использовать макросы SIGNAL() и SLOT() для спецификации signal and the method, например:

    QLabel *label = new QLabel;
    QScrollBar *scrollBar = new QScrollBar;
    QObject::connect(scroll, SIGNAL(valueChanged(int)),
                     label,  SLOT(setNum(int)));

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

    // НЕПРАВИЛЬНО
    QObject::connect(scroll, SIGNAL(valueChanged(int value)),
                     label, SLOT(setNum(int value)));

Также, сигнал может быть связан с другим сигналом:

    class MyWidget : public QWidget
    {
        Q_OBJECT

    public:
        MyWidget();

    signals:
        void buttonClicked();

    private:
        QPushButton *myButton;
    };

    MyWidget::MyWidget()
    {
        myButton = new QPushButton(this);
        connect(myButton, SIGNAL(clicked()),
                this, SIGNAL(buttonClicked()));
    }

В данном примере конструктор MyWidget перенаправляет сигнал от закрытой переменной и делает его доступным из MyWidget.

Сигнал может быть присоединен к нескольким слотам или сигналам. Несколько сигналов могут быть присоединены к одному слоту.

Если сигнал связан с несколькими слотами, то при инициализации сигнала слоты активизируются в произвольном порядке.

Если соединение сигнала со слотом произошло успешно, функция возвращает true. Она вернет false, если не удалось установить соединение, например, если QObject не смог установить сущетвование сигнала signal или метода method или если их определения несовместимы.

Сигнал испускается для каждой связи, то есть, если сигнал присоединен к двум слотам, то сигнал будет испускаться дважды. Вы всегда можете разорвать соединение вызвав disconnect().

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

См. также disconnect() и sender().

bool QObject::connect ( const QObject * sender, const char * signal, const char * method, Qt::ConnectionType type = Qt::AutoCompatConnection ) const

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

Выполняет присоединение сигнала signal объекта sender к методу method этого-же объекта.

Эквивалентно connect(sender, signal, this, method, type).

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

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

void QObject::connectNotify ( const char * signal )   [virtual protected]

Данная виртуальная функция вызывается, если что-либо в объекте ранее было связано с сигналом signal в этом объекте.

Если Вы хотите сравнить signal со спецификой сигнала, используйте QLatin1String и макрос SIGNAL() следующим образом:

    if (QLatin1String(signal) == SIGNAL(valueChanged(int))) {
        // сигнал - valueChanged(int)
    }

Если сигнал содержит множество параметров или параметры-контейнеры, примените QMetaObject::normalizedSignature() к результату работы макроса SIGNAL().

Предупреждение: Данная функция нарушает объектно-ориентированный принцип модульности. Однако, бывает полезно выполнить другую реализацию, если с сигналом связаны какие-либо действия.

См. также connect() и disconnectNotify().

void QObject::customEvent ( QEvent * event )   [virtual protected]

Эта функция может перегружена в подклассах для того, чтобы вызвать пользовательские события. Пользовательские события - события определенные пользователем типа QEvent::User перечисления QEvent::Type или определеные как подкласс QEvent. События передается через параметр event.

См. также event() и QEvent.

void QObject::deleteLater ()   [slot]

Отмечает объект для удаления.

Объект будет удален когда контроль вернется к циклу обработки сообщений.

Обратите внимание, что вход и выход из нового цикла обработки событий (например при открытии модального диалога) не выполнят отсроченное удаление; для того чтобы объект был удален, управление должно вернуться в тот цикл обработки событий, в котором была вызвана deleteLater().

См. также destroyed() и QPointer.

void QObject::destroyed ( QObject * obj = 0 )   [signal]

Данный сигнал испускается перед разрушением объекта obj и не может быть заблокирован.

После того, как этот сигнал испускается, разрушаются все дочерние по отношению к данному объекты.

См. также deleteLater() и QPointer.

bool QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method )   [static]

Разъединяет сигнал signal в объекте sender с методом method в объекте receiver.

Связь сигнал-слот удаляется при разрушении любого из вовлеченнных в нее объектов.

Следующие примеры демонстрируют три типовых способа использования disconnect().

  1. Разъединение всех связей сигналов объекта:
        disconnect(myObject, 0, 0, 0);

    эквивалентно нестатической перегужаемой функции

        myObject->disconnect();
  2. Разъединение всех связей определенного сигнала:
        disconnect(myObject, SIGNAL(mySignal()), 0, 0);

    эквивалентно нестатической перегружаемой функции

        myObject->disconnect(SIGNAL(mySignal()));
  3. Разъединение всех связей с определенным приемником:
        disconnect(myObject, 0, myReceiver, 0);

    эквивалентно нестатической перегружаемой функции

        myObject->disconnect(myReceiver);

0 может использоваться как объединяющий символ, обозначающий "любой сигнал", "любой объект-приемник" или "любой слот объекта-приемника" соответственно.

Объект источник - sender - не может быть 0. (В одном вызове функции Вы можете уничтожить связи сигналов не более одного объекта.)

Если signal равен 0, то разъединяются связи методов method приемника receiver со всеми сигналами. В противном случае будут уничтожены связи конкретного сигнала.

Если receiver равен 0, то разъединяются все связи содержащие signal. В противном случае, слоты объектов отличных от receiver не разъединяются.

Если method равен 0, то разъединняются все связи приемника receiver. В противном случае, разъединяются только связи, содержащие слот method, а все другие слоты остаются не тронутыми. Параметр method должен быть равен 0 если receiver не определен, так что Вы не можете разъединить связи всех объектов содержащие определенный слот.

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

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

bool QObject::disconnect ( const char * signal = 0, const QObject * receiver = 0, const char * method = 0 )

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

Разъединяет сигнал signal и слот method объекта-приемника receiver.

Связь сигнал-слот удаляется, когда разрушается любой из вовлеченных в нее объектов.

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

bool QObject::disconnect ( const QObject * receiver, const char * method = 0 )

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

Разъединяет все сигналы объекта с методом method объекта-приемника receiver.

Связь сигнал-слот удаляется, когда разрушается любой из вовлеченных в нее объектов.

void QObject::disconnectNotify ( const char * signal )   [virtual protected]

Эта виртуальная функция вызывается когда разрушается связь в которой участвует сигнал signal данного объекта.

Пример сравнения сигнала signal с определенным сигналом приведен здесь: connectNotify()

Внимание: Данная функция нарушает объекто-ориентированный принцип модульности. Однако, она может быть полезна для обеспечения доступа к нужным ресурсам.

См. также disconnect() и connectNotify().

void QObject::dumpObjectInfo ()

Выводит информацию о связях сигнала и т.д. в окно отладки.

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

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

void QObject::dumpObjectTree ()

Выводит дерево дочерних объектов в окно отладки.

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

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

bool QObject::event ( QEvent * e )   [virtual]

Данная функция посылает события и возвращает true если событие e было получено и обработано.

Функция event() может быть перегружена, чтобы настроить поведение объекта.

См. также installEventFilter(), timerEvent(), QApplication::sendEvent(), QApplication::postEvent() и QWidget::event().

bool QObject::eventFilter ( QObject * watched, QEvent * event )   [virtual]

Фильтрует события если данный объект установлен как фильтр событий для наблюдаемого объекта - watched.

В Вашей реализации функции, Вы можете фильтровать события event, т.е. если Вы хотите остановить отработку события, возвращайте true; в противном случае возвращайте false.

Пример:

    class MainWindow : public QMainWindow
    {
    public:
        MainWindow();

    protected:
        bool eventFilter(QObject *obj, QEvent *ev);

    private:
        QTextEdit *textEdit;
    };

    MainWindow::MainWindow()
    {
        textEdit = new QTextEdit;
        setCentralWidget(textEdit);

        textEdit->installEventFilter(this);
    }

    bool MainWindow::eventFilter(QObject *obj, QEvent *event)
    {
        if (obj == textEdit) {
            if (event->type() == QEvent::KeyPress) {
                QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
                qDebug() << "Ate key press" << keyEvent->key();
                return true;
            } else {
                return false;
            }
        } else {
            // пересылка сообщения родительскому классу
            return QMainWindow::eventFilter(obj, event);
        }
    }

Заметьте, что в примере выше, необрабатываемые события проходят через функцию eventFilter() класса-основы, так как класс-основа может в свою очередь переопределить функцию eventFilter() для своих нужд.

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

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

T QObject::findChild ( const QString & name = QString() ) const

Возвращает дочерний объект, который может быть приведен к типу T and и имеет имя name или 0 если такой объект не найден. Пустая строка обозначает любое имя. Поиск выполняется рекурсивно.

Если существует более чем один дочерний объект соответствующий условию, то возвращается ближайший в иерархии. Если есть несколько равнозначных объектов в иерархии, будет возвращен один из них. В этом случает лучше использовать, findChildren().

В данном примере возвращается дочерний по отношению к parentWidget объект типа QPushButton с именем "button1":

    QPushButton *button = parentWidget->findChild<QPushButton *>("button1");

В данном примере возвращается дочерний по отношению к parentWidget объект типа QListWidget:

    QListWidget *list = parentWidget->findChild<QListWidget *>();

Внимание: Данная функция не доступна в MSVC 6. Если Вы работаете с указанным компилятором, используйте qFindChild().

См. также findChildren() и qFindChild().

QList<T> QObject::findChildren ( const QString & name = QString() ) const

Возвращает все дочерние, по отношению к данному, объекты имеющие имя name которые могут быть приведены к типу T или пустой список, если таких объектов нет. Пустая строка обозначает люсое имя. Поиск выполняется рекурсивно.

Следующий пример показывает как получить список дочерних по отношению к parentWidget объектов типа QWidget имеющих имя widgetname:

    QList<QWidget *> widgets = parentWidget.findChildren<QWidget *>("widgetname");

В данном примере возвращается список всех дочерних по отношению к parentWidget объектов типа QPushButton:

    QList<QPushButton *> allPButtons = parentWidget.findChildren<QPushButton *>();

Внимание: Данная функция не доступна в MSVC 6. Если Вы работаете с указанным компилятором, используйте qFindChildren().

См. также findChild() и qFindChildren().

QList<T> QObject::findChildren ( const QRegExp & regExp ) const

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

Возвращает список дочерних объектов, которые могут быть приведены к типу T и имеющих имя соответствующее регулярному выражения regExp или пустой список, если такие объекты не найдены. Поиск выполняется рекурсивно.

Внимание: Данная функция не доступна в MSVC 6. Если Вы работаете в указанным компилятором, используйте qFindChildren().

bool QObject::inherits ( const char * className ) const

Возвращает true в случае, если данный объект является экземпляром класса наследующего className или если подкласс QObject наследует className; в противном случае возвращает false.

Считается, что класс наследует себя самого.

Пример:

    QTimer *timer = new QTimer;         // QTimer наследует QObject
    timer->inherits("QTimer");          // возвращает true
    timer->inherits("QObject");         // возвращает true
    timer->inherits("QAbstractButton"); // возвращает false

    // QLayout наследует QObject и QLayoutItem
    QLayout *layout = new QLayout;
    layout->inherits("QObject");        // возвращает true
    layout->inherits("QLayoutItem");    // возвращает false

(QLayoutItem - это не QObject.)

По сравнению с использованием qobject_cast<Type *>(object), данный метод является более быстрым и безопасным.

См. также metaObject() и qobject_cast().

void QObject::installEventFilter ( QObject * filterObj )

Устанавливает фильтр событий filterObj в данном объекте. Например:

    monitoredObj->installEventFilter(filterObj);

Фильтр сообщений - это объект, получающий все сообщения посланные данному объекту. Фильтр может отменить обработку сообщения или передать сообщение для дальнейшей обработки. Фильтр сообщений filterObj получает сообщения через свою функцию eventFilter(). Функция eventFilter() должна вернуть true если сообщение было отфильтровано, (т.е. остановлено); в противном случае возвращает false..

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

Пример класса KeyPressEater фильтрующего события клавиатуры посланные объекту:

        class KeyPressEater : public QObject
        {
            Q_OBJECT
            ...

        protected:
            bool eventFilter(QObject *obj, QEvent *event);
        };

        bool KeyPressEater::eventFilter(QObject *obj, QEvent *event)
        {
            if (event->type() == QEvent::KeyPress) {
                QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
                qDebug("Ate key press %d", keyEvent->key());
                return true;
            } else {
                // стандартная обработка сообщений
                return QObject::eventFilter(obj, event);
            }
        }

Один фильтр сообщений можно установить на несколько виджетов:

        KeyPressEater *keyPressEater = new KeyPressEater(this);
        QPushButton *pushButton = new QPushButton(this);
        QListView *listView = new QListView(this);

        pushButton->installEventFilter(keyPressEater);
        listView->installEventFilter(keyPressEater);

Например, класс QShortcut использует эту технику для перехвата нажатия горячих клавиш.

Внимание: Если Вы удаляете объект-приемник в функции eventFilter(), то необходимо возвратить true. Если Вы возвратите false, Qt пошлет событие в удаленный объект, что приведет к краху программы.

См. также removeEventFilter(), eventFilter() и event().

bool QObject::isWidgetType () const

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

Вызов данной функции эквивалентен вызову inherits("QWidget"), но работает намного быстрее.

void QObject::killTimer ( int id )

Разрушает таймер с идентификатором id.

Идентификатор таймера возвращается при его запуске функцией startTimer().

См. также timerEvent() и startTimer().

const QMetaObject * QObject::metaObject () const   [virtual]

Возвращает указатель на метаобъект данного объекта.

Метаобъект содержит информацию о классе наследующем QObject, имя класса, superclass name, свойства, сигналы и слоты. Каждый класс включающий макрос Q_OBJECT будет иметь метаобъект.

Информация содержащаяся в метаобъекте используется механизмом соединений сигнал/слот и системой свойств. Функция inherits() также реализована с использованием метаобъекта.

void QObject::moveToThread ( QThread * targetThread )

Изменяет принадлежность объекта и его дочерних объектов к потоку. Объект имеющий родителя не может быть перемещен в другой поток. Обработка событий будет продолжена в targetThread. Для перемещения объекта в основной поток, в качестве targetThread передайте QCoreApplication::thread().

Если в качестве targetThread передан ноль, только посланные события будут обработаны в основном потоке; все остальные события объекта и его дочерних объектов будут остановлены.

Обратите внимание, что у объекта будут повторно установлены. Сначала таймеры останавливаются в текущем потоке, а потом запускаются (с тем-же интервалом) в targetThread. В результате, постоянно перемещая объект между потоками, можно откладывать наступление событий таймер неопределенно долго.

Внимание: Данная функция не является потокобезопасной; текущий процесс должнен быть ближайшим текущим процессом. Другими словами, данная функция может только "передать" объект от текущего потока к другому, но не может "забрать" от другого потока и передать его в текущий.

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

QObject * QObject::parent () const

Возвращает указатель на родительский объект.

См. также setParent() и children().

QVariant QObject::property ( const char * name ) const

Возвращает значение свойства объекта с именем name.

Если свойства с таким именем не существует, возвращается недействительное занчение.

Информация о всех доступных свойствах объекта получается через metaObject().

См. также setProperty(), QVariant::isValid(), and metaObject().

int QObject::receivers ( const char * signal ) const   [protected]

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

При вызове данной функции можно использовать макрос SIGNAL() для передачи определения сигнала:

    if (receivers(SIGNAL(valueChanged(QByteArray))) > 0) {
        QByteArray data;
        get_the_value(&data);       // дорогая операция
        emit valueChanged(data);
    }

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

Внимание: Данная функция нарушает объектно-ориентированный принцип модульности. Однако, она бывает полезна когда нужно выполнить какие-либо дорогие действия только в случае наличия соединений с сигналом.

void QObject::removeEventFilter ( QObject * obj )

Удаляет объект фильтра событий obj из данного объекта. Если такой фильтр событий не был установлен в данный объект, то ничего не происходит.

Все фильтры событий данного объекта автоматически удаляется при разрушении объекта.

Фильтр событий всегда можно без проблем удалить, даже если в данный момент он активирован (т.е. внутри функции eventFilter()).

См. также installEventFilter(), eventFilter() и event().

QObject * QObject::sender () const   [protected]

Возвращает указатель на объект пославший сигнал, если вызвана внутри слота, активизированного этим сигналом; в противном случае возвращает 0. Указатель действует только в течение времени, пока выполняется слот вызвавший эту функцию.

Указатель возвращенный функцией становится неудачным если объект-излучатель разрушен или если слот разъединен с сигналом объекта-излучателя.

Внимание: Данная функция нарушает объектно-ориентированный принцип модульности. Однако, доступ к объеку-излучателю бывает полезен, когда несколько сигналов связаны с одним слотом. Объект-излучатель неопределен когда слот вызывается как обычная функция C++.

void QObject::setParent ( QObject * parent )

Делает объект дочерним по отношению к объекту parent.

См. также parent() и QWidget::setParent().

bool QObject::setProperty ( const char * name, const QVariant & value )

Устанавливает свойство объекта с именем name в значение value.

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

Информация о доступных функциях может быть получена с помощью metaObject().

См. также property() и metaObject().

bool QObject::signalsBlocked () const

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

По умолчанию сигналы не заблокированы.

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

int QObject::startTimer ( int interval )

Запускает таймер и возвращает его идентификатор. Если таймер не удалось запустить, возвращает ноль.

Событие таймера наступает с периодичностью interval выраженный в миллисекундах пока за вызвана killTimer(). Если interval = 0, то событие таймера наступает каждый раз когда отсутствуют события окна для обработки.

Виртуальная функция timerEvent() вызывается с параметром класса события QTimerEvent всякий раз, когда наступает событие таймера. Реализуйте эту функция, чтобы отреагировать на событие таймера.

Если используется несколько таймеров, то для определения активного таймера можно использовать QTimerEvent::timerId().

Пример:

    class MyObject : public QObject
    {
        Q_OBJECT

    public:
        MyObject(QObject *parent = 0);

    protected:
        void timerEvent(QTimerEvent *event);
    };

    MyObject::MyObject(QObject *parent)
        : QObject(parent)
    {
        startTimer(50);     // 50-миллисекундный таймер
        startTimer(1000);   // 1-миллисекундный таймер
        startTimer(60000);  // 1-минутный таймер
    }

    void MyObject::timerEvent(QTimerEvent *event)
    {
        qDebug() << "Timer ID:" << event->timerId();
    }

Обратите внимание что точность QTimer зависит от основной операционной системы и аппаратных средств. Большинство платформ обеспечивают точность в 20 миллисекунд; некоторые больше. Если Qt не способен установить требуемое число, то тихо поставит возможное.

Класс QTimer предоставляет высокоуровневый программный интерфейс для работы с одиночными таймерами и сигналами таймеров вместо событий. Также есть класс QBasicTimer который является более легким и менее неуклюжим, чем QTimer и который обходится без идентификаторов таймеров.

См. также timerEvent(), killTimer() и QTimer::singleShot().

QThread * QObject::thread () const

Возвращает поток в котором находится объект.

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

void QObject::timerEvent ( QTimerEvent * event )   [virtual protected]

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

QTimer provides a higher-level interface to the timer functionality, and also more general information about timers. The timer event is passed in the event parameter.

См. также startTimer(), killTimer() и event().

QString QObject::tr ( const char * sourceText, const char * comment )   [static]

Возвращает переведенную версию sourceText, или саму sourceText если нет соответствующей переведенной версии. Контекст перевода - Object и comment (по умолчанию 0). Все объекты, являющиеся подклассами QObject используют макрос Q_OBJECT который автоматически реализует эту функцию с именем подкласса в качестве контекста.

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

См. также trUtf8(), QApplication::translate() и Локализация в Qt.

QString QObject::trUtf8 ( const char * sourceText, const char * comment )   [static]

Возвращает переведенную версию sourceText или QString::fromUtf8(sourceText) если нет соответствующей переведенной версии. Говоря другими словами, функция идентична tr(sourceText, comment).

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

Внимание: Для обеспечения переносимости мы рекомендуем использовать escape-последовательности для обозначения не-ASCII символов в строковых литералах trUtf8(). Например:

    label->setText(tr("F\252r \310lise"));

См. также tr(), QApplication::translate() и Локализация в Qt.


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

typedef QObjectList

Синоним QList<QObject>.

T qFindChild ( const QObject * obj, const QString & name )

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

Вызов данной функции эквивалентен вызову obj->findChild<T>(name). Эта функция поддерживается в MSVC 6, который не поддерживает шаблон функции-члена.

См. также QObject::findChild().

QList<T> qFindChildren ( const QObject * obj, const QString & name )

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

Вызов данной функции эквивалентен вызову obj->findChildren<T>(name). Эта функция поддерживается в MSVC 6, который не поддерживает шаблон функции-члена.

См. также QObject::findChildren().

QList<T> qFindChildren ( const QObject * obj, const QRegExp & regExp )

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

Вызов данной функции эквивалентен вызову obj->findChildren<T>(regExp). Эта функция поддерживается в MSVC 6, который не поддерживает шаблон функции-члена.

T qobject_cast ( QObject * object )

Возвращает полученный объект object приведенный к типу T если данный объект имее тип T (или является его подклассом); в противном случае возвращает 0.

Класс считается наследником самого себя.

Пример:

    QObject *obj = new QTimer;          // QTimer наследует QObject

    QTimer *timer = qobject_cast<QTimer *>(obj);
    // timer == (QObject *)obj

    QAbstractButton *button = qobject_cast<QAbstractButton *)(obj);
    // button == 0

Функция qobject_cast() работает аналогично страндартной функции C++ dynamic_cast() с тем исключением, что не требует поддержки RTTI и работает через границы библиотек.

qobject_cast() также может использоваться совместно с интерфейсами; для более детальной информации см. Plug & Paint.

См. также QObject::inherits().


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

Q_CLASSINFO ( Name, Value )

Данный макрос включает в класс дополнительную информацию, которая доступна через QObject::metaObject(). Этот макрос нужен Qt для реализации расширения ActiveQt.

Данный макрос принимает строку Name и строку литералов Value.

Пример:

    class MyClass : public QObject
    {
        Q_OBJECT
        Q_CLASSINFO("Author", "Pierre Gendron")
        Q_CLASSINFO("URL", "http://www.my-organization.qc.ca")

    public:
        ...
    };

См. также QMetaObject::classInfo().

Q_ENUMS ( ... )

Данный макрос регистрирует один или несколько типов перечислений в метаобъектной системе.

Пример:

    Q_ENUMS(Option AlignmentFlag EditMode TransformationMode)

См. также Система свойств Qt.

Q_FLAGS ( ... )

Данный макрос регистрирует один или несколько типов "флагов" в метаобъектной системе.

Пример:

    Q_FLAGS(Options Alignment)

См. также Система свойств Qt.

Q_INTERFACES ( ... )

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

Пример:

    class BasicToolsPlugin : public QObject,
                             public BrushInterface,
                             public ShapeInterface,
                             public FilterInterface
    {
        Q_OBJECT
        Q_INTERFACES(BrushInterface ShapeInterface FilterInterface)

    public:
        ...
    };

Для получения более детальной информации см. пример Основные инструменты Plug & Paint.

См. также Q_DECLARE_INTERFACE(), Q_EXPORT_PLUGIN() и How to Create Qt Plugins.

Q_OBJECT

Макрос Q_OBJECT должен быть вставлен в секцию определений любого объекта имеющего сигналы и слоты или использующего предоставляемую метаобъектной системой Qt информацию.

Например:

    #include <QObject>

    class Counter : public QObject
    {
        Q_OBJECT

    public:
        Counter() { m_value = 0; }

        int value() const { return m_value; }

    public slots:
        void setValue(int value);

    signals:
        void valueChanged(int newValue);

    private:
        int m_value;
    };

См. также Метаобъектная Система, Сигналы и Слоты, и Система Свойств Qt.

Q_PROPERTY ( ... )

Данный макрос декларирует свойство QObject. Синтаксис:

    Q_PROPERTY(type name
               READ getFunction
               [WRITE setFunction]
               [RESET resetFunction]
               [DESIGNABLE bool]
               [SCRIPTABLE bool]
               [STORED bool])

Например:

    Q_PROPERTY(QString title READ title WRITE setTitle)

См. также Система Свойств Qt.


Copyright © 2005 Trolltech Trademarks
Qt 4.1.0
Hosted by uCoz