Hay all,
First to thank you in advance for any provided help.
This is my first post here, apologies for formatting mistakes or similar things.
I’m trying to run simple turing machine in gui. I’m using Qt 5.4.0 (64 bit),
and running on a Windows 8.1. My understanding is that it should work fine
without further configuration, although I have some doubts. Previous programs that
I created, in previous version of Qt(4.x.x), worked fine configured similarly to this.
Problem is in creation of signal from one thread to main program.
I get this error:
error: C3861: 'pass' identifier not found
commenting this section in threads cpp causes program to compile successfully:
emit pass(a, b, count);
this is the function in which emit is located from turingmcn.cpp:
void Turing_run(Turing *mcn, char *tape, int tape_len)
{
int count=0;
if (!mcn->current)
printf_s("Turning machine has now start state.");
while (TRUE)
{
if(choice == 0)
{
if (mcn->current->accept == TRUE)
{
a=mcn->current->accept;
b=mcn->current->id;
break;
}
else if (mcn->current->reject == TRUE)
{
a=mcn->current->accept;
b=mcn->current->id;
break;
}
else
{
Turing_step(mcn, tape, tape_len);
count++;
printf_s("current state: %d\n", mcn->current->id);
}
}
else if (choice == 1)
{
Turing_step(mcn, tape, tape_len);
count++;
}
else
{
while(choice==3)
{
SleepConditionVariableCS(&paused,&wait,INFINITE);
}
if(choice == 4)
{
mcn->current->id=0;
}
}
}
emit pass(a, b, count);
}
this is header of a thread turingmcn.h
#ifndef TURINGMCN
#define TURINGMCN
#include <QtCore>
#include <QThread>
#include "string"
Q_DECLARE_METATYPE (std::string)
class turing: public QThread
{
Q_OBJECT
public:
explicit turing(QObject *parent = 0);
public slots:
void sentence(QString);
void button(int);
signals:
void pass(int, int, int);
};
#endif // TURINGMCN
This is part of main cpp file:
TuringMachine::TuringMachine(QWidget *parent) :
QMainWindow(parent), ui(new Ui::TuringMachine)
{
ui->setupUi(this);
T = new turing(this);
ui->label_5->hide();
connect(this, SIGNAL(sentence(QString)), T, SLOT(sentence(QString)));
connect(this, SIGNAL(button(int)), T, SLOT(button(int)));
connect(T, SIGNAL(pass(int, int, int)), this, SLOT(part(int,int,int)));
}
And his header:
#ifndef TURINGMACHINE_H
#define TURINGMACHINE_H
#include "turingmcn.h"
#include "string"
#include <QMainWindow>
#include <QtCore>
namespace Ui {
class TuringMachine;
}
class TuringMachine : public QMainWindow
{
Q_OBJECT
public:
explicit TuringMachine(QWidget *parent = 0);
~TuringMachine();
turing *T;
signals:
void sentence(QString);
void button(int);
public slots:
void part(int, int, int);
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_lineEdit_editingFinished();
void on_pushButton_4_clicked();
void on_pushButton_3_clicked();
private:
Ui::TuringMachine *ui;
};
#endif // TURINGMACHINE_H
I apriciate any kind of help. Tnx again.
↧