QStringList strLsFiles - это член-данная класса, в которм запускаются потоки. В ней хранятся адреса текстовых файлов. Но к данной проблеме она отношения не имеет. если объявить несколько объктов не в QList - то работает отлично. Если же объявлять их в QList - падают при запуске метода start. Аналогично,если объект класса-потока объявить в функции. Следовательно при инициализации в QList его элементы выходят за область видимости. Не могу пока решить эту проблему.
#ifndef VECTORINGTEXT_H
#define VECTORINGTEXT_H
#include "QtCore/QtCore"
class VectoringText : public QThread
{
public:
VectoringText(QObject* parent = 0, QString str = "");
VectoringText(const VectoringText& vt);
virtual ~VectoringText();
bool operator =(const VectoringText& vt);
void init(QObject* parent = 0, QString str = "");
protected:
void run();
private:
QString fil_in;
QString fil_out;
};
#endif // VECTORINGTEXT_H
#include "vectoringtext.h"
VectoringText::VectoringText(QObject* parent, QString str)
{
setParent(parent);
fil_in = str;
fil_out = fil_in+"_CL.txt";
}
VectoringText::VectoringText(const VectoringText& vt)
{
setParent(vt.parent());
fil_in = vt.fil_in;
fil_out = vt.fil_out;
}
VectoringText::~VectoringText()
{
}
bool VectoringText::operator =(const VectoringText& vt)
{
setParent(vt.parent());
fil_in = vt.fil_in;
fil_out = vt.fil_out;
return true;
}
void VectoringText::init(QObject* parent, QString str)
{
setParent(parent);
fil_in = str;
fil_out = fil_in+"_CL.txt";
}
void VectoringText::run()
{
QFile file_in(fil_in);
if(!file_in.open(QIODevice::ReadOnly)) return;
QFile file_out(fil_out);
if (!file_out.open(QIODevice::WriteOnly)) return;
QTextStream in(&file_in);
QTextStream out(&file_out);
char ch = ' ';
char pre_ch = ' ';
while (!in.atEnd())
{
in>>ch;
out<<ch;
pre_ch = ch;
}
file_in.close();
file_out.close();
exec();
}
/*
* File: WizardPage2.h
* Author: akaMDA
*
* Created on 29 ������� 2010 �., 9:52
*/
#ifndef WIZARDPAGE2_H
#define WIZARDPAGE2_H
#include <QtGui/QtGui>
#include "vectoringtext.h"
class WizardPage2 : public QWizardPage {
Q_OBJECT
public:
WizardPage2(QWidget* parent);
WizardPage2(QWidget* parent, const WizardPage2& orig);
virtual ~WizardPage2();
void setTextStat(QString str);
void begin();
private:
QVBoxLayout* lay;
QLabel* lbPict;
QLabel* lbTextStat;
QStringList strLsFiles;
void initializePage();
QList<VectoringText> ltVT;
VectoringText vt;
QStack<bool> stack_thread;
};
#endif /* WIZARDPAGE2_H */
/*
* File: WizardPage2.cpp
* Author: akaMDA
*
* Created on 29 Октябрь 2010 г., 9:52
*/
#include "WizardPage2.h"
WizardPage2::WizardPage2(QWidget* parent) {
setParent(parent);
lay = new QVBoxLayout(this);
lbPict = new QLabel(tr("Картинка часов"));
lbPict->setAlignment(Qt::AlignCenter);
lay->addWidget(lbPict, Qt::AlignCenter);
lbTextStat = new QLabel(tr("Состояние процесса"));
lbTextStat->setAlignment(Qt::AlignCenter);
lay->addWidget(lbTextStat, Qt::AlignCenter);
setLayout(lay);
}
WizardPage2::WizardPage2(QWidget* parent, const WizardPage2& orig) {
}
WizardPage2::~WizardPage2() {
}
void WizardPage2::setTextStat(QString str)
{
lbTextStat->setText(str);
}
void WizardPage2::initializePage()
{
strLsFiles.append(field("File").toStringList());
setTextStat(tr("Инициализация..."));
begin();
}
void WizardPage2::begin()
{
setTextStat(tr("Векторизация текста"));
vt.init(this, strLsFiles.at(0));
vt.start(QThread::TimeCriticalPriority);
for(int i = 0; i < strLsFiles.count(); ++i)
{
ltVT[i](this, strLsFiles.at(i));
ltVT[i].start(QThread::TimeCriticalPriority);
stack_thread.push(1);
}
setTextStat(tr("Окончание"));
}
при вызове старт возникает ошибка -
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: DataClustering.exe
Версия приложения: 0.0.0.0
Отметка времени приложения: 4ce12697
Имя модуля с ошибкой: QtCored4.dll
Версия модуля с ошибкой: 4.7.0.0
Отметка времени модуля с ошибкой: 4c8d7577
Код исключения: 40000015
Смещение исключения: 0000e680
Версия ОС: 6.1.7600.2.0.0.768.11
Код языка: 1049
Дополнительные сведения 1: 0c46
Дополнительные сведения 2: 0c468683048b9b6a0bbe53bf3a1fd8b9
Дополнительные сведения 3: d6d5
Дополнительные сведения 4: d6d507d9b5ddac7e52e2d5f5e0bb6da2
Ознакомьтесь с заявлением о конфиденциальности в Интернете:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом:
C:\windows\system32\ru-RU\erofflps.txt