main.cpp文件
#include <QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
signals:
public slots:
void OnAct(bool);
};
#endif // MAINWINDOW_H
mainwindow.cpp文件
#include "mainwindow.h"
#include <QToolBar>
#include <QThread>
#include <QAction>
#include <QDebug>
#include <QDesktopServices>
#include <QUrl>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QToolBar *tb = new QToolBar();
this->addToolBar(tb);
QAction* act = tb->addAction("help");
connect(act,SIGNAL(triggered(bool)) ,this,SLOT(OnAct(bool)));
}
void MainWindow::OnAct(bool)
{
qDebug()<<"currentThreadId:"<<QThread::currentThreadId();
QString url ("E:/abc.txt");
bool bOk = QDesktopServices::openUrl(QUrl(url, QUrl::StrictMode));
qDebug()<<"end";
}
快速连续点击help工具按钮,运行结果如下

正常执行流程应该是
currentThreadId: 0x303c
end
currentThreadId: 0x303c
end
我测试的结果是由于 QDesktopServices::openUrl(QUrl(url, QUrl::StrictMode));函数引起,必须能正确打开文件,函数错误不会产生该现象,请教各路大神为什么同一个线程中槽函数return之前为什么又可以进入该曹函数。