相关疑难解决方法(0)

Qt信号可以返回一个值吗?

Boost.Signals允许使用槽的返回值的各种策略来形成信号的返回值.例如,添加它们,形成vector它们,或返回最后一个.

常见的智慧(在Qt文档中表达[编辑:以及该问题的一些答案])是Qt信号不可能有这样的事情.

但是,当我在以下类定义上运行moc时:

class Object : public QObject {
    Q_OBJECT
public:
    explicit Object( QObject * parent=0 )
        : QObject( parent ) {}

public Q_SLOTS:
    void voidSlot();
    int intSlot();

Q_SIGNALS:
    void voidSignal();
    int intSignal();
};
Run Code Online (Sandbox Code Playgroud)

不仅没有moc抱怨具有非void返回类型的信号,它似乎以允许返回值传递的方式主动实现它:

// SIGNAL 1
int Object::intSignal()
{
    int _t0;
    void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
    QMetaObject::activate(this, &staticMetaObject, 1, _a);
    return _t0;
}
Run Code Online (Sandbox Code Playgroud)

所以:根据文档,这件事是不可能的.那么moc在这做什么?

插槽可以有返回值,那么我们可以将带有返回值的插槽连接到具有返回值的信号吗?毕竟,这可能吗?如果是这样,它有用吗?

编辑:我不是要求解决方法,所以请不要提供任何解决方法.

编辑:它显然在Qt::QueuedConnection模式中没用(QPrintPreviewWidget …

c++ qt return-value signals-slots boost-signals

51
推荐指数
2
解决办法
4万
查看次数

Qt:槽返回值的含义?

根据文档,插槽的返回值并不意味着什么.
然而在生成的moc代码中,我看到如果一个槽返回一个值,则该值用于某些东西.知道它做了什么?


这是我正在谈论的一个例子.这是从moc生成的代码中获取的.'message'是一个不返回任何内容的插槽,'selectPart'被声明为返回int.

case 7: message((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
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;
Run Code Online (Sandbox Code Playgroud)

c++ qt signals-slots

25
推荐指数
4
解决办法
2万
查看次数

标签 统计

c++ ×2

qt ×2

signals-slots ×2

boost-signals ×1

return-value ×1