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();});