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