尝试QProcess
在HmiApplication
派生自QApplication
.
应用程序在第 6 行抛出一个SIGSEGVmain.cpp
。仅当hmiapplication.cpp
注释掉第 11 行时才会发生这种情况(如果我没有qDebug()
QProcess 的标准输出)。
为了简单明了,我在创建 QProcess 时没有处理任何返回值。
主文件
#include "hmiapplication.h"
int main(int argc, char **argv)
{
HmiApplication hmi(argc, argv);
return hmi.exec(); // LINE 6 - SIGSEGV
}
hmiapplication.h
#ifndef HMIAPPLICATION_H
#define HMIAPPLICATION_H
#include <QApplication>
#include <QProcess>
class HmiApplication : public QApplication
{
Q_OBJECT
public:
HmiApplication(int argc, char **argv);
virtual ~HmiApplication();
private:
QProcess *macFinder = nullptr;
};
#endif // HMIAPPLICATION_H
hmiapplication.cpp
#include "hmiapplication.h"
HmiApplication::HmiApplication(int argc, char **argv) : QApplication(argc, argv)
{
macFinder = new QProcess(this);
macFinder->start("arping", QStringList() << "-c 2" << "192.168.1.1");
macFinder->waitForReadyRead();
QString ret(macFinder->readAllStandardOutput());
ret = ret.mid(ret.indexOf('[') + 1, 17);
qDebug() << ret; // LINE 11
}
HmiApplication::~HmiApplication()
{
}
编辑:
如果我添加QVector<Camera*> cameras;
到标题和
for(quint8 i = 0; i < 10; i++) {
Camera *cam = new Camera(i);
cameras.append(cam);
}
对于源文件,我是否删除该行并不重要,qDebug()
并且在这两种情况下都会引发分段错误。
Camera
是一个派生类,并且在没有上面提到QLabel
的情况下可以完美地工作。QProcess