Qt模型和视图 - 从模型到视图链接数据,如何?

时间:2015-05-30 19:21:01

标签: qt view model signals slots

我对模型和视图概念很陌生,而且我无法找到正确的方法来执行此操作。所以在我的理解中,这个概念意味着,我有一个处理所有视图(GUI)部分的类和另一个处理数据处理的类。

我制作的GUI有一些显示窗口小部件(LCDnumbers),只需要从另一个类中获取数据并将其输出到LCD中。 所以我在GUI类中创建了一个函数,可以在LCD中设置一个数字。我已经创建了一个可以更改数据类中数字值的函数。 现在我需要一些东西来连接它们,例如当我更改数据类中的数字时,我希望它在GUI中更新。我发现了一些关于信号和插槽的信息(并发出信号),但是在保持模型和视图概念的同时,它是如何工作的?

可能会在其他地方回答这个问题,如果可以的话,你可以把我链接到源头吗?我无法找到解决问题的方法。 感谢阅读,我希望有人可以帮助我。

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;

};

GUI的CPP文件:

#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);
}

数据类代码:

部首:

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 个答案:

答案 0 :(得分:0)

对于应用model/view concept of Qt,您应该使用至少一个模型类。这样的模型类为几种类型的数据(字符串列表,树,sql等)提供统一的接口。

要显示数据,可以使用通过QDataWidgetMaper

连接到模型的视图类或小部件

在您的情况下,没有使用模型/视图可观察。 MainBoard应该是用于发出信号的QObject:

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;
}