0

I'm pretty new to the Model and View concept and I'm having trouble finding the right way to do this. So in my understanding the concept means, that I have one class that handles all the view (GUI) parts and an other class which handles the data processing.

The GUI I made has a few Display Widgets (LCDnumbers) which just have to get data from the other class and output it into the LCD. So I made a function in the GUI class which can set a number into the LCD. And I've made a function which can change the value of the number in the data class. Now I need something to connect those, for example when I change the number in the data class I want it to update in the GUI. I found somethings about Signals and Slots (and emitting a signal) but how does that work, while maintaining the Model and View concept?

It could be that this is answered somewhere else, if so, can you link me the source? I couldn't find anything to solve my problem. Thanks for reading and I hope someone can help me.

Header file of the GUI:

#include <QMainWindow>
#include <QtCore>
namespace Ui {
class MainBoardView;
}

class MainBoardView : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainBoardView(QWidget *parent = 0);
    ~MainBoardView();
    void ChangeNumber(int value);   
private:
    Ui::MainBoardView *ui;

};

CPP file of the GUI:

#include "mainboardview.h"
#include "ui_mainboardview.h"

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

}

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

void MainBoardView::ChangeNumber(int value)
{
    ui->lcdNumber->display(value);
}

Code of the data class:

Header:

class MainBoard
{
public:
    MainBoard();
    void changeMoney(int value);
private:
    int m_money;
}

CPP:

void MainBoard::ChangeMoney(int value)
{
    m_money = value;
    //emit a signal here with the value to the ChangeNumber function of the GUI?
   //and how should I do this?

}

1 Answers1

0

For applying model/view concept of Qt you should use at least one of a model classes. Such model classes provide unified interface for several types of data (string-list, trees, sql, etc.)

For displaying the data one would use either a view-class or widgets connected to the model via QDataWidgetMaper

In your case there is no use of model/view observable. MainBoard should be QObject for emitting the signal:

class MainBoard: public QObject
{
  Q_OBJECT
public:
    MainBoard();
    void changeMoney(int value); //emit value with emit moneyChanged(value) in the implementation.
signals:
    void moneyChanged(int)
private:
    int m_money;
}
Valentin H
  • 7,240
  • 12
  • 61
  • 111
  • It don't understand it 100% yet but I'll read trough the documentation you provided and will test my findings out. If I have any other questions I'll post them down here, thanks for the help! – CrazyEgoist May 31 '15 at 11:34