• 5903阅读
  • 4回复

[提问]QT如何在程序内部触发某个槽函数? [复制链接]

上一主题 下一主题
离线dolphin836
 

只看楼主 倒序阅读 楼主  发表于: 2012-02-06
我工程中有一个线程负责串口通信    它是一个while(1)循环

主程序中有一个保存按键  我在对应的ui.h文件中实现了对应的槽函数

单击这个按键 可以保存一副图像

我现在想做的是

通过串口发送一个命令给我  当我的串口线程接收到这个命令时  保存一副图像

不能在串口线程中直接调用这个保存的槽函数   因为这个槽函数需要一定的时间(2s多)

能不能当我收到串口命令时   把某个全局变量置为TRUE

然后串口线程继续运行  根据这个标志位 怎么去触发保存的槽函数呢?
离线XChinux

只看该作者 1楼 发表于: 2012-02-06
将你的while(1)循环改成用QTimer控制的事件来处理,自定义一个信号与主线程连接起来。比如

MyThread::run()
{
      QTimer::singleShot(0, this, SLOT(myProc());
      exec();
}

MyThread::myProc()
{
    bool continue;
      ......
      if (bCallOutFunc)
      {
            emit callOutFunc(data);
      }
      if (continue)
      {
          QTimer::singleShot(0, this, SLOT(myProc()));
      }
}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线yleesun

只看该作者 2楼 发表于: 2012-02-06
1.emit 信号。
2.直接调槽函数。
离线dolphin836

只看该作者 3楼 发表于: 2012-02-07
我自己去看了一下QT的信号与槽机制  


关于emit没有看的很明白


我现在有一个主窗体叫Form2


在Form2上有一个按钮叫saveButton


界面是用设计器画的 Form2.h 和Form2.cpp是自动生成的


saveButton连接了一个单击的操作(click)


我在Form2.ui.h中实现了saveButton的槽函数FPsaveButton();


现在我只要在触摸屏上点击saveButton就可以调用槽函数FPsaveButton(),保存一副图像


如果要在串口线程中通过emit来发送saveButton按键的click事件,从而调用槽函数FPsaveButton(),要怎么写呢?
离线dolphin836

只看该作者 4楼 发表于: 2012-02-07
我现在通过单触发定时器实现了这个功能

谢谢两位大牛的帮助
快速回复
限100 字节
 
上一个 下一个