#qt #signals #qprocess
#qt #сигналы #qprocess
Вопрос:
Я пишу класс program-builder. И у меня ошибка сегментации.
#ifndef BUILDER_H
#define BUILDER_H
#include <QObject>
#include <QProcess>
#include <QDir>
#include <QFileInfo>
class Builder : public QProcess
{
Q_OBJECT
public:
explicit Builder(QObject *parent = 0);
void loadSource(QString fpath);
bool isBuilded();
private:
QProcess* shell;
QString source;
QString path;
QString module;
signals:
void sourceLoaded();
void builded();
protected slots:
void build();
};
#endif // BUILDER_H
И .cpp:
#include "builder.h"
Builder::Builder(QObject *parent) :
QProcess(parent)
{
connect(this,SIGNAL(sourceLoaded()),this,SLOT(build()));
connect(this,SIGNAL(finished(int)),this,SIGNAL(builded()));
}
void Builder::loadSource(QString fpath)
{
source = fpath;
QFileInfo info(source);
path = info.absoluteDir().absolutePath();
module = path info.baseName();
emit sourceLoaded();
}
bool Builder::isBuilded()
{
if(QFile::exists(module))
return true;
return false;
}
void Builder::build()
{
QStringList argv;
argv << source;
start("g ",argv);
}
Мой код должен скомпилировать программу, которая выдает loadSource(QString).
Когда я запускаю функцию start(), программа возвращает сигнал SISSEGV. Я не вижу ошибки.
Комментарии:
1. Вы выполнили свой экземпляр QApplication или QCoreApplication? Механизм сигнального слота зависит от цикла событий для многопоточных случаев. Можете ли вы указать, как вы использовали этот класс?
2. недостаточно маны! Нам нужно больше кода! Реализация класса Builder выглядит достаточно хорошо для компиляции и даже работы… НО как вы используете класс Builder?