PDA

View Full Version : How to access widgets created with the UI Designer from another (a sub) class.



saralicia
30th December 2012, 15:56
Hello!

I started this month programming with QT. So long I've been able to create a GUI (ControlLoop) with the QT Designer and access its widgets with signals and slots declared in the Sourcefile. Now I have a new class (StartGui) which inherits from ControlLoop. In StartGui I'm trying to catch the signals from the ControlLoop's widgets at runtime, I have tried almost everything I've read. I connect the signals and slots in der StartGui class and get no error messages. But whenever the program is running and I change the Text in e.g. a QLineEdit, nothing happens. Could you please help me? I've been stuck at this point for days.

I don't know what I'm doing wrong whenever I connect the Widgets, the nothing happens when the programm is running and I do any of the signals.

Here are the headers of my files:

ControlLoop.h

#ifndef CONTROLLOOP_H
#define CONTROLLOOP_H

#include <QObject>
#include <QMainWindow>

namespace Ui {
class ControlLoop;
}

class ControlLoop : public QMainWindow
{
Q_OBJECT

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

Ui::ControlLoop *ui;


ControlLoop .cpp

#include "controloop.h"
#include "ui_controloop.h"

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


And the StartGUI files:

startgui.h

#ifndef STARTGUI_H
#define STARTGUI_H

#include "controlloop.h"
#include "ui_guiregelkreis.h"

class StartGui : public ControlLoop
{

Q_OBJECT

public:
StartGui();
ControlLoop *GUI;

public slots:
on_JobLineEdit_textChanged(QString)
....
}


StartGui.cpp

#include "startgui.h"
#include "ui_controlloop.h"


StartGui::StartGui()
{

GUI = new ControlLoop();

connect(GUI->ui->JobLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(on_JobLineEdit_textChanged(QString)));
connect(GUI->ui->MaschineLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(on_MaschineLineEdit_textChanged(QString)));

....

void StartGui::on_JobLineEdit_textChanged(QString)
{
...
}
...
}

amleto
30th December 2012, 16:08
oh wow, what are you doing here? Learn some c++ and what inheritance is for first, please.

StartGui already IS a ControlLoop. Why are you using StartGui to make ANOTHER ControlLoop?? :confused:

Oh yeah, use code tags as well!!

saralicia
30th December 2012, 16:25
I know! I'm a beginner, please excuse my lack of knowledge...
I will keep reading about inheritance and so, but could you please tell me if it is even possible to access the widget from the StartGui?

Without making another ControlLoop it would look like this:
connect(ui->JobLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(on_JobLineEdit_textChanged(QString)));

Is it even possible to achieve that, or is the whole idea just wrong?

Thank you very much!

anda_skoa
30th December 2012, 17:35
Without making another ControlLoop it would look like this:
connect(ui->JobLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(on_JobLineEdit_textChanged(QString)));

Is it even possible to achieve that, or is the whole idea just wrong?


This should be OK, ui needs to be accessible to StartGui, so it needs to be protected (or public) in ControlLoop.

amleto
30th December 2012, 23:20
should just get rid of startgui tbh.