所以,我终于找到了这个奇怪的问题,我找不到答案。
我正在创建一个小gui,在一个单独的窗口中启动一个应用程序,然后使用qtimer轮询该应用程序的状态。
process_timer = new QTimer(this);
connect(process_timer, SIGNAL(timeout()), this, SLOT(checkFlashProcess()));
process_timer->start(100);
所以这很有效。但我不想每次都创建一个新的计时器,所以我将process_timer的创建放在了gui的构造函数中:
Flasher::Flasher(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Flasher)
{
ui->setupUi(this);
process_timer = new QTimer(this);
}
现在这会导致崩溃和输出: QObject :: connect:无法连接(null):: timeout()到Flasher :: checkFlashProcess()
同样如此:
Flasher::Flasher(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Flasher),
process_timer(new QTimer)
{...
QTimer * process_timer在应用程序标题中定义。
我也尝试将process_timer定义为非动态:
header.h:
QTimer process_timer;
code.cpp
void Flasher::on_flashButton_clicked()
{
(...)
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, process_pid );
if(hProcess)
{
qDebug() << "Got handle for process!";
connect(&process_timer, SIGNAL(timeout()), this, SLOT(checkFlashProcess()));
process_timer.start(30);
}
这也会导致崩溃。
回调:
void Flasher::checkFlashProcess()
{
qDebug() << "Got handle for process!";
}
但为什么会这样?我想计时器不会在构造函数中创建,但在构造函数中创建对象应该不是问题吧?为什么静态版本也会崩溃,这会是同样的问题吗?
答案 0 :(得分:0)