gpt4 book ai didi

c++ - 使用元数据类型中继信号/槽

转载 作者:行者123 更新时间:2023-11-28 00:23:53 27 4
gpt4 key购买 nike

它编译正常,但这是我运行程序时的错误消息:

QObject::connect: Cannot queue arguments of type 'QVector<double>'
(Make sure 'QVector<double>' is registered using qRegisterMetaType().)

第一部分运行良好,当我添加另一层(换句话说是中继)时,我收到了这条新的错误消息。所以这是有效的部分:

connect(&m_dataTestTab, SIGNAL(notifyAddGraph()),
&m_dataTest, SLOT(createGraph()));

connect(&m_dataTest, SIGNAL(sendGraphData(QVector<double>,QVector<double>)),
&m_dataTestTab, SLOT(drawGraph(QVector<double>,QVector<double>)));

此时的设置是这样的:

Press a button -> create some data -> emit data back to the view and draw graph

我决定我希望上面的 sendGraphData 在线程上工作,所以在 dataTest 类中,我添加了这个额外的层,其中 worker 类在它自己的线程上,所以现在的设置是:

Press a button -> notifies DataTest to launch a thread -> emit data from thread -> relay data from DataTest to the view -> draw my graph in the view

所以 DataTest 中的额外层有这个连接:

connect(m_worker, SIGNAL(sendGraphData(QVector<double>,QVector<double>)),
this, SLOT(relaySendGraphData(QVector<double>,QVector<double>)));

然后对于relaySendGraphData:

void DataTest::relaySendGraphData(const QVector<double> &valueX, const QVector<double> &valueY)
{
qDebug() << valueX;
emit sendGraphData(valueX, valueY); //should now connect up to the view
}

这应该已经有效地将数据从线程(worker)发送到 DataTest 类,然后将其中继到 DataTestTab(或view) 所以它不需要知道任何关于线程的信息。

它甚至没有输入 relaySendGraphData,如果我删除额外的连接层,错误消息就会消失。

知道为什么这不起作用吗?

最佳答案

试试这个:

qRegisterMetaType<QVector<double> >("QVector<double>");

编译很好,因为信号和槽的错误通常可以在运行时检测到。

文档:http://qt-project.org/doc/qt-4.8/qmetatype.html#qRegisterMetaType

所以你可以试试这个:

typedef QVector<double> MyArray;
// ...
qRegisterMetaType<MyArray>("MyArray");
// ...
connect(this, SIGNAL(signal(MyArray)),this, SLOT(slot(MyArray)),Qt::QueuedConnection);

关于c++ - 使用元数据类型中继信号/槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26074230/

27 4 0
文章推荐: c++ - std::unordered_set 插入获取对象
文章推荐: javascript - 将引用的样式表动态添加到内联样式
文章推荐: javascript -