在静态函数中发出一个信号
Emit a signal in a static function
我有一个静态函数: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 );
}
将指向该类的指针作为参数传递给lancerserver,或者您可以使用worker类上的插槽并将其移动到线程中。
请参阅下面的示例http://qt-project.org/doc/qt-4.8/qthread.html,了解如何使用插槽在单独的线程上完成工作。
相关文章:
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- Qt将信号与另一个类方法连接
- 从另一个线程发出信号是否安全?
- Qt的新信号/时隙语法问题 - 连接到一个简单的函数
- 在另一个线程上发出 QObject 信号的正确方法?
- 一个 ui 成员的 Qt 连接和同一连接中的两个信号
- 一个类中的QT信号/插槽,但从不同的线程发出
- glib:在另一个线程上处理自定义 GMainContext* 循环,不引发信号处理程序
- 将一个信号连接到多个插槽 Qt
- 有没有一种方法可以将升压信号直接连接到另一个信号
- Boost::signals2-传递一个信号槽作为参数
- 通过按 Enter 完成编辑时更改或清除 QLineEdit 上的焦点,并在 Qt 中仅发送一个信号
- 从类中创建一个信号来调用外部函数
- 是否可以在切换QTreeWidgetItem复选框时创建一个信号
- GTK3如何将一个信号连接到多个窗口小部件
- 从c++线程发出一个信号
- 在静态函数中发出一个信号
- 如何从一个信号中找出进程的pid是在linux中的c++中开始的
- Qt代码不编译时,我试图连接一个信号到插槽
- 将QVector从一个信号传递到不同线程中的插槽会导致数据复制吗?