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

Posted

技术标签:

【中文标题】Qt 模型和视图 - 将数据从模型链接到视图,如何?【英文标题】:Qt Model and View - Link data from model to view, how? 【发布时间】:2015-05-30 19:21:01 【问题描述】:

我对模型和视图的概念还很陌生,我很难找到正确的方法来做到这一点。因此,在我的理解中,这个概念意味着我有一个类处理所有视图 (GUI) 部分,而另一个类处理数据处理。

我制作的 GUI 有一些显示小部件 (LCDnumbers),它们只需从其他类获取数据并将其输出到 LCD。 所以我在 GUI 类中做了一个函数,可以在 LCD 中设置一个数字。我制作了一个可以更改数据类中数字值的函数。 现在我需要一些东西来连接它们,例如当我更改数据类中的数字时,我希望它在 GUI 中更新。我发现了一些关于 Signals 和 Slots(并发出信号)的东西,但它是如何工作的,同时又保持了 Model 和 View 的概念?

这可能是在其他地方回答,如果是这样,你能链接我的来源吗?我找不到任何东西来解决我的问题。 感谢阅读,我希望有人可以帮助我。

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?


【问题讨论】:

当然他们有这样的文档:doc.qt.io/qt-5/modelview.html 【参考方案1】:

要应用model/view concept of Qt,您应该至少使用一个模型类。此类模型类为多种类型的数据(string-list、trees、sql 等)提供统一的接口

为了显示数据,可以使用视图类或通过QDataWidgetMaper连接到模型的小部件

在您的情况下,没有使用模型/视图 observable。 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;

【讨论】:

它还不能 100% 理解它,但我会阅读您提供的文档并测试我的发现。如果我有任何其他问题,我会在这里发布,感谢您的帮助!

以上是关于Qt 模型和视图 - 将数据从模型链接到视图,如何?的主要内容,如果未能解决你的问题,请参考以下文章

Qt 模型/视图:如何正确处理底层数据

在 Qt 模型/视图中修改数据表示

Qt 嵌套模型视图

Qt4 模型/视图 - 在视图中转换数据?

将模型绑定到 Qt TableView

Qt--模式视图设计