linux系统 QT 处理键盘Ctrl+C信号

linux系统 QT 处理键盘Ctrl+C信号

1 设置Ctrl+C信号处理函数 Ctrl+C运行 ,serialPort不能用

.h

public:
    explicit axisControl(axisInfo *axisinf,QWidget *parent = nullptr);
    ~axisControl();

    // 成员函数的Ctrl+C信号处理程序
    static  void handleCtrlC(int signal);
     // 静态的中间函数
     static void handleCtrlCWrapper(int signal);

.c

    // 设置Ctrl+C信号处理函数 Ctrl+C运行 ,serialPort不能用
  signal(SIGINT,handleCtrlC);
// 设置Ctrl+C信号处理函数 Ctrl+C运行 ,serialPort不能用,发不了
// 静态成员函数的实现
void  axisControl::handleCtrlC(int signal) {
    if (signal == SIGINT) {
        char data[2] ={1,4};
        long ret = serialPort->write(data,sizeof (data));

        std::cout << "Ctrl+C handleSignal received. Cleaning up..." << std::endl;

        // 在这里执行你的清理工作或其他任务
        // ...
        qDebug() << "handleCtrlC ...";

        // 在这里执行你的清理工作或其他任务
        // ...

        qDebug() << "Ctrl-C  handleCtrlC write ok 1 ... : %d  !"<<ret;
        //sleep(2);
        qDebug() << "Ctrl-C handleCtrlC  write ok 2... : %d  !"<<ret;
       // sleep(2);
         qDebug() << "Ctrl-C handleCtrlC delete ok 3... : %d  !"<<ret;
         if(ret == 2){
             // 最后退出应用程序
             QCoreApplication::quit();
         }

    }
}

2 Ctrl+C不运行 aboutToQuit

.h

private slots:
    void cleanupBeforeQuit();

.c

  // 连接 aboutToQuit 信号  Ctrl+C不运行
   connect(qApp, &QCoreApplication::aboutToQuit, this, &axisControl::cleanupBeforeQuit);
 在这个成员函数中执行清理工作  Ctrl+C不运行
void axisControl::cleanupBeforeQuit() {
//    qDebug() << "Ctrl-C  cleanupBeforeQuit Cleaning up before quitting...";

//    // 在这里执行你的清理工作或其他任务
//    // ...
//    char data[2] ={1,4};
//    long ret = serialPort->write(data,sizeof (data));
//    qDebug() << "Ctrl-C cleanupBeforeQuit  write ok 1 ... : %d  !"<<ret;
//    sleep(2);
//    qDebug() << "Ctrl-C cleanupBeforeQuit write ok 2... : %d  !"<<ret;
//    sleep(1);
//     qDebug() << "Ctrl-C cleanupBeforeQuit delete ok 3... : %d  !"<<ret;

//    // 最后退出应用程序
//    QCoreApplication::quit();
}

3 子界面关闭时执行清理工作 -ok closeEvent

.h


protected:
     void closeEvent(QCloseEvent *event) override;

.c

// 子界面关闭时执行清理工作
void axisControl::closeEvent(QCloseEvent *event)
{
    qDebug() << "Cleaning up before quitting...";

    // 在这里执行你的清理工作或其他任务
    // ...
    char data[2] ={1,4};
    long ret = serialPort->write(data,sizeof (data));
    qDebug() << " closeEvent write ok 1 ... : %d  !"<<ret;
    sleep(2);
    qDebug() << "  closeEvent  write ok 2... : %d  !"<<ret;
    sleep(2);
     qDebug() << "  closeEvent delete ok 3... : %d  !"<<ret;
//    serialPort->close();
//    delete  axisData;
//    delete serialPort;
//    delete actionControl;
//   delete ui;

    // 最后退出应用程序
   // QCoreApplication::quit();
  //  QMainWindow::closeEvent(event);
}

4 ctrl-C 不运行,关闭界面 运行,但serialPort发送不了数据。axisControl::~axisControl()

axisControl::~axisControl()
{
    char data[2] ={1,4};
    long ret = serialPort->write(data,sizeof (data));
    qDebug() << "Ctrl-C  axisControl write ok 1 ... : %d  !"<<ret;
    sleep(2);
    qDebug() << "Ctrl-C axisControl write ok 2... : %d  !"<<ret;
    sleep(2);
    qDebug() << "Ctrl-C axisControldelete ok 3... : %d  !"<<ret;
//    char data[2] ={1,4};
//    long ret = serialPort->write(data,sizeof (data));
//    sleep(1);
//    serialPort->close();
//    delete  axisData;
//    delete serialPort;
//    delete actionControl;
  //  delete ui;
}

5. QCoreApplication::aboutToQuit Ctrl+C不运行

    connect(qApp, &QCoreApplication::aboutToQuit, [this](){
        qDebug() << "About to quit. Cleaning up...";
        // 执行清理工作,例如关闭文件、释放资源等
            qDebug() << "Ctrl-C  aboutToQuit Cleaning up before quitting...";

            // 在这里执行你的清理工作或其他任务
            // ...
            char data[2] ={1,4};
            long ret = serialPort->write(data,sizeof (data));
            qDebug() << "Ctrl-C aboutToQuit  write ok 1 ... : %d  !"<<ret;
            sleep(2);
            qDebug() << "Ctrl-C aboutToQuit write ok 2... : %d  !"<<ret;
            sleep(2);
             qDebug() << "Ctrl-C aboutToQuit delete ok 3... : %d  !"<<ret;

            // 最后退出应用程序
           // QCoreApplication::quit();
    });
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常驻客栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值