好的,我是一个初学者,但我在这里遗漏了一些东西。浏览了 Qt 文档/示例以及我可以通过 Google 挖掘的所有内容。所有类似的信息在上下文中都略有不同......
我刚开始使用 Qt SIGNALS 和 SLOTS,我在 gui 示例和课程中都很成功。现在,我想将子类中的 SIGNAL 与兄弟类中的 SLOT 连接起来,并在父主类中定义 Connect。最终,我的目标是在处理 QTcpSocket 的类中接收 iamges,并将数据作为 char* 发出以由另一个类处理(保存或显示)。
现在,我刚刚在控制台应用程序中创建了最基本的排列版本作为学习练习。我有一个发送者类...
发件人.h
#ifndef SENDER_H
#define SENDER_H
#include <QObject>
class sender : public QObject
{
Q_OBJECT
public:
sender(QObject *parent = 0);
~sender();
signals:
void output(int data);
public slots:
void test(int data);
private:
};
#endif // SENDER_H
发件人.cpp
#include <iostream>
#include "sender.h"
sender::sender(QObject *parent)
: QObject(parent)
{
std::cout << "Created sender" << std::endl;
int stuff = 47;
std::cout << "stuff = " << stuff << std::endl;
connect(this, SIGNAL(output(int)), this, SLOT(test(int)));
emit output(stuff);
}
void sender::test(int data)
{
std::cout << "Got to test, data = " << data << std::endl;
}
sender::~sender()
{
std::cout << "Destroying sender" << std::endl;
}
...和一个接收器类...
接收器.h
#ifndef RECEIVER_H
#define RECEIVER_H
#include <QObject>
class receiver : public QObject
{
Q_OBJECT
public:
receiver(QObject *parent = 0);
~receiver();
public slots:
void input (int data);
private:
};
#endif // RECEIVER_H
接收器.cpp
#include <iostream>
#include "receiver.h"
receiver::receiver(QObject *parent)
: QObject(parent)
{
std::cout << "Created receiver" << std::endl;
}
void receiver::input(int data)
{
std::cout << "Got data as = " << data << std::endl;
}
receiver::~receiver()
{
std::cout << "Destroying receiver" << std::endl;
}
我的主要看起来像这样......
主文件
#include <QtCore/QCoreApplication>
#include <iostream>
#include "sender.h"
#include "receiver.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
receiver myReceiver;
sender mySender;
if (QObject::connect(&mySender, SIGNAL(output(int)),
&myReceiver, SLOT(input(int))))
{
std::cout << "Got here so connect returned true" << std::endl;
}
return a.exec();
}
我添加了 cout 输出和 sender::test 函数来尝试找出发生了什么。
对我来说,这可以干净地编译并且运行时没有任何警告或错误,但是 sender::test SLOT 被称为 receiver::input SLOT 却没有。main 中的连接测试返回 true,并且发送方或接收方都不会过早销毁。控制台输出是...
Created receiver
Created sender
stuff = 47
Got to test, data = 47
Got here so connect returned true
所以发出了 SIGNAL,SIGNAL 和 SLOT 参数匹配,我在 sender.h 和 receiver.h 中都有 Q_OBJECT 宏,并且都继承自和 #include QObject。
怎么了???
PS我正在运行4.8.3,IDE是带有Qt插件的VS2010。