gpt4 book ai didi

Qt:信号的返回值有效,为什么官方文档说不可能/禁止?

转载 作者:行者123 更新时间:2023-12-04 08:27:47 27 4
gpt4 key购买 nike

Qt documentation说,信号的返回值是不可能的:

Signals are automatically generated by the moc and must not be implemented in the .cpp file. They can never have return types (i.e. use void).



相关的问题:
  • Can Qt signals return a value?
  • Qt: meaning of slot return value?

  • 然而,从我的试验(Qt 4.8.1)我可以看出返回值确实有效:
  • 如果信号/槽在同一个线程中,ConnectionType 可能是 Qt::AutoConnection
  • 在不同线程中使用信号/插槽,我需要使用 Qt::BlockingQueuedConnection

  • 所以在我的代码中,我调用了一个信号
    QString dp = emit WscAircrafts::signalAircraftsJsonArray();

    并且信号 moc 返回 QString ,
    QString _t0;
    void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
    QMetaObject::activate(this, &staticMetaObject, 0, _a);
    return _t0;

    这是插槽 moc,它传回 QString
    case 4: { QString _r = _t->slotAircraftJsonArray();
    if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; } break;

    所有这些似乎都非常简单,那么为什么与文档矛盾呢?使用返回值的问题在哪里?如上所述,在我的代码中这似乎有效。

    最佳答案

    问题是在连接时不检查返回类型的兼容性,因此将双返回槽连接到浮点返回信号,也就是说,将溢出分配给浮点的堆栈(无双关语)空间。

    关于Qt:信号的返回值有效,为什么官方文档说不可能/禁止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11890644/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com