相关疑难解决方法(0)

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万
查看次数

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

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

信号由moc自动生成,不得在.cpp文件中实现.他们永远不会有返回类型(即使用void).

相关的SO问题:

  1. Qt信号可以返回一个值吗?
  2. Qt:槽返回值的含义?

但是,根据我的试验(Qt 4.8.1),我可以告诉返回值确实有效:

  1. 如果signal/slot在同一个线程中,则ConnectionType可能是 Qt::AutoConnection
  2. 我需要使用不同线程中的信号/插槽 Qt::BlockingQueuedConnection

所以在我的代码中我通过调用信号

QString dp = emit WscAircrafts::signalAircraftsJsonArray();
Run Code Online (Sandbox Code Playgroud)

并且信号moc返回a QString,

QString _t0;
void *_a[] = { const_cast<void*>(reinterpret_cast<const void*>(&_t0)) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
return _t0;
Run Code Online (Sandbox Code Playgroud)

这里是它传回的插槽moc QString

case 4: { QString _r = _t->slotAircraftJsonArray();
  if (_a[0]) *reinterpret_cast< QString*>(_a[0]) = _r; }  break;
Run Code Online (Sandbox Code Playgroud)

所有这一切似乎都很直接,为什么这与文档的矛盾呢?使用返回值的问题在哪里?如上所述,在我的代码中,这似乎有效.

qt qt4 qt-signals

8
推荐指数
1
解决办法
2510
查看次数

如何通过信号和槽发送数据?

有人可以帮助如何连接信号和插槽吗?

我有接收实时数据的函数1(一个值)

void function1(int,double)
{
   if(condition)
     {
     //some code
     numb3 = 100;// double numb3 received new data
     emit mySignal(numb3);
     }
}
Run Code Online (Sandbox Code Playgroud)

然后在其他函数中我有应该接收捕获值的变量

   void function2(int,double)
    {

     double parameter2 = numb3;
    }
Run Code Online (Sandbox Code Playgroud)

我试过像这样的组合

Q_SIGNAL double mySignal(double newValue=0){return newValue;};
Q_SLOT double slot1(double param=0) {emit mySignal(param); };

and then in function2{
connect(customPlot,SIGNAL(mySignal()), qApp, SLOT(slot1()));
double parameter2 = slot1();}
Run Code Online (Sandbox Code Playgroud)

但他们没有像我想的那样工作。

提前致谢!

c++ qt

2
推荐指数
1
解决办法
5496
查看次数

标签 统计

qt ×3

c++ ×2

qt-signals ×1

qt4 ×1

signals-slots ×1