QT C++,从子层次结构调用 main 中的函数
QT C++, Call a function in main from a child hierarchies
我目前正在开发需要这种架构的软件:
主程序 -> OpcClient -> 节点传送带 -> 节点负载
知道在主要中我创建了一个客户端。 创建客户端时,他会创建 xx 节点传送带。 创建的每个节点传送带都会创建 xx 节点负载。
创建 NodeLoad 后,我会检查一些参数,如果某些参数不好,我希望将信号传输到 Main 的插槽,以便在ui_mainwindow的 QPlainText 中显示它。
为此,我在类 NodeLoad 中创建了一个信号,该信号连接到类 NodeConveyor 中的一个插槽。类节点传送带的插槽发出连接到类 OpcClient 插槽的信号。OpcClient 类的插槽发出连接到主程序插槽的信号。
但是,当我测试时,只有类 OpcClient 的信号和主程序插槽之间的连接有效。
我正在使用 MinGW 5.12.0 32 位编译器处理 Qt 5.12.3
-----节点加载类-----
NodeLoad::NodeLoad(QOpcUaClient* client, int x, int y,QString opcNameSpace)
{
if(QOpcUa::BadNodeIdUnknown) emit NodeIdError_Signal();
}
-----节点传送带类-----
NodeConveyor::NodeConveyor(QOpcUaClient* client,int x,QString opcNameSpace)
{
for(int y(0);y<1;y++)
{
Load[y] = new NodeLoad(client,x,y,opcNameSpace);
connect(Load[y],SIGNAL(NodeIdError_Signal()),this,SLOT (ConveyorIdError_Slot()));
}
}
void NodeConveyor::ConveyorIdError_Slot()
{
emit ConveyorIdError_Signal();
}
-----OPC_CLient类-----
OPC_Client::OPC_Client(QString ServerUrl): m_servUrl(ServerUrl)
{
for(int i(0);i<nbConveyors;i++)
{
conveyor[i] = new NodeConveyor(m_client,i,"ns=2;");
connect(conveyor[i],SIGNAL(ConveyorIdError_Signal()),this,SLOT(ClientIdError_Slot()));
}
}
void OPC_Client::ClientIdError_Slot()
{
emit ClientIdError_Signal();
}
-----OPC_Main类-----
OPC_Main::OPC_Main(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::OPC_Main),
{
OPC_client = new OPC_Client("opc.tcp://127.0.0.1:49320");
connect(OPC_client,SIGNAL(ClientIdError_Signal()),this,SLOT(IdError_Slot()));
}
void iMPRESS_OPC_Main::IdError_Slot()
{
ui->mLog->appendHtml(QTime::currentTime().toString("h:mm:ss ") + "<font color="Red">" + " - Error Tag Names doesn't match");
}
目前,只有当我发出clientIdError_Signal()时,直接从OPC_Client发出::OPC_Client...将显示该消息。
有人对我的问题有所了解吗?
发射后连接信号和插槽。我的意思是当信号发出(在构造函数中)时不存在连接。尝试在连接后发出信号(不是在构造函数中,而是在构造函数之后调用的某种方法中,例如NodeLoad::CheckForErrors()
)。像这样的东西
NodeConveyor::NodeConveyor(QOpcUaClient* client,int x,QString opcNameSpace)
{
for(int y(0);y<1;y++)
{
Load[y] = new NodeLoad(client,x,y,opcNameSpace);
connect(Load[y],SIGNAL(NodeIdError_Signal()),this,SLOT (ConveyorIdError_Slot()));
Load[y]->CheckForErrors();
}
}
void NodeLoad::CheckForErrors()
{
if(QOpcUa::BadNodeIdUnknown) emit NodeIdError_Signal();
}
是的,谢谢,这就是我昨天意识到的。向物体的施工发出信号,或者施工后进行信号连接。
有没有一种方法可以将节点输送机的信号直接连接到主插槽?
我已经通过直接连接它们之间的信号来改进程序。我删除了中间插槽。
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- "main"函数堆栈中的对象在第一个任务运行时被覆盖 (FreeRTOS)
- 为什么 'main' 函数中的局部 int 变量会自动初始化?
- 为什么在我的 main 函数中声明整数后我的整数数组中会出现错误?
- 尝试更改 main 函数内的全局变量值时出现编译错误 C++.
- 我应该在 main 函数中写什么来测试我的问题?
- 如何在 main 函数中输出两个新字符串C++?
- 有没有办法通过 main 函数访问受保护的矢量大小而无需将其转换为公共?
- 我们可以在main函数中声明嵌套类对象吗
- 为什么Main函数上的Sleep()会停止所有线程
- C++ main 函数中初始化静态变量
- 为什么VC++/MFC没有main函数?
- 如何在 main 函数的一个对象中初始化两个类的值?C++
- 在 C++ 中解析 main 函数的大量输入的正确方法是什么
- 如何编写一个 void 函数,该函数将在数组中搜索值,并通过引用将该值的位置传递回 main 函数
- 如何将矩阵参数发送到从C 中的MAIN函数
- 如何从子例程函数获取到 main 函数的返回值
- 为什么我不能在 main 函数中更改类的公共变量
- C++编译错误:多个定义"main",但项目中只有一个 main 函数
- 如何使用 x86 程序集在 c 中访问 main 函数中的变量