QT: значение возвращаемого значения слота?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

25
задан Venemo 7 January 2011 в 12:35
поделиться

3 ответа

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

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

bool QAbstractItemDelegate::helpEvent 

, который является слотом с типом возврата и назван от

QAbstractItemView::viewportEvent

использование invokeMethod.

я думаю, что возвращаемое значение для слота только доступно, когда функция вызвана непосредственно (когда это - нормальная функция C++), или при использовании invokeMethod. Я думаю, что это действительно предназначено для внутренних спокойных функций, а не для нормальной эксплуатации в программах с помощью QT

Редактирование: Для демонстрационного случая:

case 8: { int _r = selectPart((*reinterpret_cast< AppObject*(*)>(_a[1])), *reinterpret_cast< int(*)>(_a[2])));
if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; }  break;

вектор _a является списком аргументов, который передается qt_metacall. Это передается QMetaObject:: invokeMethod. Таким образом, возвращаемое значение в MOC генерировало код, сохраняется и пасуется назад вызывающей стороне. Таким образом для взаимодействий слота нормального сигнала возвращаемое значение не используется ни для чего вообще. Однако механизм существует так, чтобы к возвращаемым значениям от слотов можно было получить доступ, если слот называют через invokeMethod.

12
ответ дан David Dibben 28 November 2019 в 21:28
поделиться

Возвращаемое значение только полезно, если Вы хотите назвать слот как нормальную функцию членства:

class MyClass : public QObject {
    Q_OBJECT
public:
    MyClass(QObject* parent);
    void Something();
public Q_SLOTS:
    int Other();
};

пустой MyClass:: Что-то () {интервал res = это-> Другой ();...} Редактирование: кажется, что это не единственный способ, которым возвращаемое значение может использоваться, QMetaObject:: метод invokeMethod может использоваться, чтобы назвать слот и получить возвращаемое значение. Хотя кажется, что это немного более сложно, чтобы сделать.

14
ответ дан Terence Simpson 28 November 2019 в 21:28
поделиться

Это очень полезно, когда вы имеете дело с динамическим языком таким QTScript JavaScript Qtpython и так далее. С помощью этого языка / привязки вы можете использовать динамически с помощью C ++, используя интерфейс, предоставленный MetaObject. Как вы, наверное, знаете, только сигналы и слоты проанализируются MOC и генерируют описание MetaObject. Поэтому, если вы используете C ++ Qobject из привязки JavaScript, вы сможете вызвать только такие слоты, и вы захотите возвращаемое значение. Часто QT-привязки для динамических языков предоставляют некоторое средство для аксессуаров к нормальному методу, но процесс определенно более трики.

6
ответ дан 28 November 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: