我有一个静态函数:static void lancerServeur(std::atomic<bool>& boolServer)
,这个函数是强制静态的,因为我在一个线程中启动它,但是由于这个原因,我不能在这个函数中发出信号。这是我尝试做的事情:
void MainWindow::lancerServeur(std::atomic<bool>& boolServer){
serveur s;
StructureSupervision::T_StructureSupervision* bufferStructureRecu;
while(boolServer){
bufferStructureRecu = s.receiveDataUDP();
if(bufferStructureRecu->SystemData._statutGroundFlight != 0){
emit this->signal_TrameRecu(bufferStructureRecu);//IMPOSSIBLE TO DO
}
}
}
有没有办法发出我的信号?
谢谢。
最佳答案
您可以在 MainWindow 类中保留一个指向 MainWindow 实例的静态指针,并在构造函数中对其进行初始化。然后您可以使用该指针从静态函数调用 emit。
class MainWindow : public QMainWindow
{
...
private:
static MainWindow* m_psMainWindow;
void emit_signal_TrameRecu(StructureSupervision::T_StructureSupervision* ptr)
{
emit signal_TrameRecup(ptr);
}
};
// Implementation
// init static ptr
MainWindow* MainWindow::m_psMainWindow = nullptr; // C++ 11 nullptr
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent)
{
m_psMainWindow = this;
}
void MainWindow::lancerServeur(std::atomic<bool>& boolServer)
{
StructureSupervision::T_StructureSupervision* bufferStructureRecu;
...
if(m_psMainWindow)
m_psMainWindow->emit_signal_TrameRecu( bufferStructureRecu );
}
关于c++ - 在静态函数中发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24484961/