信号和槽-传递数据
Signals and Slots - Passing Data
我试图将信号连接到插槽并通过矢量,但我没有太多运气。
res = QObject::connect(storePayments, SIGNAL(existingPurchasesResponseSuccess(std::vector<QString>)), this, SLOT(RefreshPurchasesSuccess(std::vector<QString>)));
槽:
void RefreshPurchasesSuccess(std::vector<QString>);
void Store::RefreshPurchasesSuccess(std::vector<QString> previousPurchasesArray)
{
//do something
}
信号:void existingPurchasesResponseSuccess(std::vector<QString>);
vector<QString> previousPurchasesArray;
emit existingPurchasesResponseSuccess(previousPurchasesArray);
它说信号/槽没有定义,但是当我取出向量时,它工作,所以它一定是有问题的。我定义错了吗?
谢谢
如果你使用像std::vector<QString>
这样的自定义结构,你必须声明和注册元类型
Q_DECLARE_METATYPE(std::vector<QString>)
"理想情况下,这个宏应该放在类或结构的声明下面。如果这是不可能的,它可以放在一个私有的头文件中,每次在QVariant中使用该类型时都必须包含该头文件。——Qt关于Q_DECLARE_METATYPE的文档
对于排队连接,您可能需要qRegisterMetatype
qRegisterMetaType<std::vector<QString> >();
qRegisterMetaType可以在main()
中调用,甚至在QApplication::exec()
之前。
还请记住,如果您的类声明了任何信号或插槽,则必须使用Q_OBJECT
宏。
" Q_OBJECT宏必须出现在类定义的私有部分,声明自己的信号和槽,或者使用Qt的元对象系统提供的其他服务。"
如果你没有理由使用std::vector<QString>
,那么使用QStringList
会简单得多,它已经为Qt的元对象系统所知,提供了许多方便的方法来操作其内容,并且作为标准Qt类型将适合非您的槽定义。
相关文章:
- 在 C++17 中,是否未定义使用无锁原子学保护从信号处理程序传递的数据?
- 通过信号槽发送QPixmap指针,空像素图数据
- 使用信号处理程序处理从 FIFO 接收的数据
- C++ QTextDocument::contentChange() 信号提供无效的输入数据
- QTcpSocket ready读取信号在传输数据时停止发出
- 无法获取数据槽中的发送方对象QAbstractItemModel的信号已更改
- 为什么我的数据无法在信号/插槽的表格之间传输
- 将数据馈送到数字信号中时会扭曲声音
- 如何通过信号和插槽发送数据
- Udp 在 QT 定时器信号中写入数据报
- 实时绘图的信号处理数据(c++中的FFT和GNUPLOT)
- 是否有任何本机 gtkmm 类可以从小部件的信号处理程序函数中排队命令/数据
- Qt数据改变信号-不使用提供的小区范围
- 我如何在缓冲区中分离信号数据
- 如何为所有qlineedit设置onclick信号以打开键盘小部件并发回数据
- 当从c++发出的信号向QML发送数据时
- 如何将Qt信号/槽名存储到数据结构中
- 在信号处理程序中使用长数据
- Qt QTcpSocket在读取数据时不发出信号
- QtSerialPort:readAll不会产生所有数据,也没有新的readyRead信号