В настоящее время я занимаюсь разработкой программного обеспечения, которому требуется эта архитектура:
Основная программа -> OpcClient -> NodeConveyor -> NodeLoad
Зная, что в главном я создаю одного клиента.Когда клиент создан, он создает xx NodeConveyors.Каждый созданный NodeConveyor создает xx NodeLoads.
После создания NodeLoad я проверяю некоторые параметры и хотел бы, если они не подходят, передать сигнал в слот Main, чтобы отобразить его в QPlainText изui_mainwindow.
Для этого я создал Signal в классе NodeLoad, который подключен к слоту в классе NodeConveyor.Слот класса NodeConveyor излучает сигнал, подключенный к слоту класса OpcClient.Слот класса OpcClient излучает сигнал, подключенный к слоту основной программы.
Однако при тестировании работает только соединение между сигналом класса OpcClient и слотом основной программы.
Я работаю над Qt 5.12.3 с 32-битным компилятором MinGW 7.3.0
----- Класс NodeLoad -----
NodeLoad::NodeLoad(QOpcUaClient* client, int x, int y,QString opcNameSpace)
{
if(QOpcUa::BadNodeIdUnknown) emit NodeIdError_Signal();
}
----- Класс NodeConveyor -----
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");
}
В настоящее время, только когда я делаю emit clientIdError_Signal ();непосредственно из OPC_Client :: OPC_Client ... отображается сообщение.
Кто-нибудь есть идеи для моей проблемы?