PDA

View Full Version : Switching between two forms with button click



gfernandes
30th August 2013, 10:52
Hi

I have successfully created multiple forms. I know how to switch from form 1 to form 2 on button click using SIGNALS and SLOTS. The problem is when I try switching from form 2 to form 1 it throws an error.

I have posted a part of the source code.
This is the first form called measure

measure.h


#ifndef MEASURE_H
#define MEASURE_H

#include <QWidget>
#include <readprocess.h>


namespace Ui {
class measure;
}

class measure : public QWidget
{
Q_OBJECT

public:
explicit measure(QWidget *parent = 0);
~measure();

private:
ReadProcess *myProcess;

private slots:
void showTime();
void on_pushButton_clicked();
void openReadProcess();

private:
Ui::measure *ui;

};

#endif // MEASURE_H

measure.cpp


#include "measure.h"
#include "ui_measure.h"
#include <QTimer>
#include <QTime>
#include <QDate>


measure::measure(QWidget *parent) :
QWidget(parent),
ui(new Ui::measure)
{
ui->setupUi(this);

}

measure::~measure()
{
delete ui;
}

void measure::showTime()
{
// some code here
}

void measure::openReadProcess()
{
myProcess = new ReadProcess();
this->close();
myProcess->show();
}

void measure::on_pushButton_clicked()
{
openReadProcess();
}

This is the second form called ReadProcess

#ifndef READPROCESS_H
#define READPROCESS_H

#include <QWidget>
#include <measure.h>

namespace Ui {
class ReadProcess;
}

class ReadProcess : public QWidget
{
Q_OBJECT

public:
explicit ReadProcess(QWidget *parent = 0);
~ReadProcess();

public slots:
void openMeasure();

private:
measure *myMeasureNew;

private slots:
void TimingEvent();
void on_abort_clicked();
void updateValue();

private:
Ui::ReadProcess *ui;
};

#endif // READPROCESS_H

readprocess.cpp

#include "readprocess.h"
#include "ui_readprocess.h"


ReadProcess::ReadProcess(QWidget *parent) :
QWidget(parent),
ui(new Ui::ReadProcess)
{
ui->setupUi(this);

}

ReadProcess::~ReadProcess()
{
delete ui;
}

void ReadProcess::updateValue()
{
//some code here
}

void ReadProcess::TimingEvent()
{
//some code here
}

void ReadProcess::openMeasure()
{
myMeasureNew =new measure();
this->close();
myMeasureNew->show();

}

void ReadProcess::on_abort_clicked()
{
openMeasure();
}



When I run my application the error thrown is
'measure' does not name a type
this error is of readprocess.h following line
private:
measure *myMeasureNew;

Cannot figure out where I am going wrong. Kindly help

Santosh Reddy
30th August 2013, 11:37
In measure.h file, instead of including "readprocess.h" forward declare "class ReadProcess;"
and include "readprocess.h" in measure.cpp

gfernandes
30th August 2013, 12:42
Thank you Santosh Reddy :) Wow! That actually did the trick. But why was my way wrong? Just curiosity sake.. Just a beginner, so wanna learn more.

Santosh Reddy
30th August 2013, 12:50
Forward declaration (http://en.wikipedia.org/wiki/Forward_declaration)