gpt4 book ai didi

c++ - windows下连接信号槽,linux下不连接

转载 作者:太空宇宙 更新时间:2023-11-04 09:32:51 24 4
gpt4 key购买 nike

关闭。这个问题需要debugging details .它目前不接受答案。












想改进这个问题?将问题更新为 on-topic对于堆栈溢出。

6年前关闭。




Improve this question




我正在开发必须在 Windows 和 Linux 下运行的 Qt 应用程序。首先我在Windows下测试函数,因为它更容易调试。之后,我在 Linux 下运行测试(使用 colinux 编译)。

现在我发现信号槽连接很少,在windows下工作的在Linux下不行。使用 QErrorMessage在 Linux 下,有类似 no such signal linuxDebugSignal()"或 "no such slot logStartedSlot()"之类的消息。但所有信号和槽都已实现,moc_file 显示它们并且所有连接在 Windows 下都返回 true。

编辑:

标题:

#include <QtCore/QObject>

class class : public QObject
{
Q_OBJECT

private:
Class(void);
~Class(void);

private slots:

void checkIniFileSlot();

void logStartedSlot();

void linuxDebugSlot();

signals:

void logMessageSignal(QString, QString, QString, int);

void checkIniFileSignal();

void stopLogSignal();

void linuxDebugSignal();
};

来源:
#include "qerrormessage.h"
#include "class.h"

Class::Class(void)
{
QErrorMessage::qtHandler();

//works
connect(this, SIGNAL(checkIniFileSignal()), this, SLOT(checkIniFileSlot()));

emit checkIniFileSignal();
}
Class::~Class(void)
{
}

void Class::checkIniFileSlot()
{
m_Log = new Log();

bool bStatus;

//works
bStatus = connect(this, SIGNAL(stopLogSignal()),
m_Log, SLOT(stopLogSlot()));

//works
bStatus = connect(this, SIGNAL(logMessageSignal(QString, QString, QString, int)),
m_Log, SLOT(logMessageSlot(QString, QString, QString, int)));

//works NOT no such slot logStartedSlot()
bStatus = connect(m_Log, SIGNAL(started()), this, SLOT(logStartedSlot()));

//works NOT no such signal linuxDebugSIgnal()
bStatus = connect(this, SIGNAL(linuxDebugSignal()), this, SLOT(linuxDebugSlot()));

}
void CWNcPlcServer::linuxDebugSlot()
{
emit logMessageSignal("", "linuxDebugSlot","",Log::LOG_DEBUG);
}
void CWNcPlcServer::logStartedSlot()
{
emit logMessageSignal("", "logStartedSlot","",Log::LOG_DEBUG);
}

抱歉没有添加代码。我的意思是这个问题,如果从 Windows 移植到 linux 时存在已知的障碍。如您所见,工作信号/插槽与不工作信号/插槽并没有真正的不同。

我在 Win7 32 位系统上开发,colinux 在 WinXP 32 位 VM 上运行,两者都具有相同的 Qt 版本。
我没有显式调用 qmake,我将 .h .cpp .pro 放在工作目录中,其他所有内容都是我使用的 colinux 发行版的一部分。我用了很长时间没有问题,现在我正在尝试获取更多关于它的信息。

解决方案:

因此,由于投票错误或其他原因,我无法添加答案。

问题是作为动态库实现的服务器应用程序的一部分。当一个 dummyclient 启动时,它会连接到该服务器以启动所有服务器功能。这个 dummyclient 什么都不做,也没有与该服务器的其他接口(interface)/通信。当实现新的服务器功能时,我们更改 server.dll,dummyclient.dll 仍然是旧的。在windows上似乎没有问题。

在不更新 dummyclient.so 的情况下更改 linux 上的 server.so 文件时,找不到较新的信号和插槽。但是您可以在示例代码中看到,这些不起作用的信号和插槽与 dummyclient 无关!?它们用于服务器内部任务。使用新的 server.so 和 server.h 编译 dummyclient 时,它可以工作,所有信号槽连接都已建立。

我希望这是可以理解的。

我是 linux 开发的新手。这是正常 react 吗?动态库呢!?

最佳答案

如果您像这样定义信号和插槽连接:

假设该类称为“SomeClass”,并且您有一个信号“someSignal”
并且您连接到“DifferentClass”中名为“someSlot”的插槽

//DifferentClass *foo;

QObject::connect(this, &SomeClass::someSignal, foo, &DifferentClass::someSlot);

如果您像这样连接,如果信号/插槽不兼容或不存在,您将收到编译器错误,这应该有助于在编译之前确保您的代码是正确的,而不是在运行时收到一条日志消息,告诉您您的信号插槽不会工作

注意:你不必输入参数,如果它们兼容,编译器会工作

关于c++ - windows下连接信号槽,linux下不连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29649400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com