Qt 模型和视图 - Link 数据从模型到视图,如何?
Qt Model and View - Link data from model to view, how?
我对模型和视图的概念还很陌生,我很难找到正确的方法来做到这一点。所以在我的理解中,这个概念意味着,我有一个 class 处理所有视图 (GUI) 部分,另一个 class 处理数据处理。
我制作的 GUI 有一些显示小部件 (LCDnumbers),它们只需要从另一个 class 获取数据并将其输出到 LCD。
所以我在 GUI class 中做了一个函数,它可以在 LCD 中设置一个数字。我做了一个函数可以改变数据中数字的值class。
现在我需要一些东西来连接它们,例如,当我更改数据 class 中的数字时,我希望它在 GUI 中更新。我发现了一些关于信号和槽(并发出信号)的信息,但它是如何工作的,同时保持模型和视图的概念?
这可能在其他地方得到了回答,如果是这样,你能 link 给我来源吗?我找不到任何东西来解决我的问题。
感谢阅读,我希望有人能帮助我。
Header 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:
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?
}
要应用 model/view concept of Qt,您应该至少使用一个 class 模型。这种模型 classes 为多种类型的数据(字符串列表、树、sql 等)提供了统一的接口
为了显示数据,可以使用视图-class 或通过 QDataWidgetMaper
连接到模型的小部件
在您的情况下,没有使用 model/view 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;
}
我对模型和视图的概念还很陌生,我很难找到正确的方法来做到这一点。所以在我的理解中,这个概念意味着,我有一个 class 处理所有视图 (GUI) 部分,另一个 class 处理数据处理。
我制作的 GUI 有一些显示小部件 (LCDnumbers),它们只需要从另一个 class 获取数据并将其输出到 LCD。 所以我在 GUI class 中做了一个函数,它可以在 LCD 中设置一个数字。我做了一个函数可以改变数据中数字的值class。 现在我需要一些东西来连接它们,例如,当我更改数据 class 中的数字时,我希望它在 GUI 中更新。我发现了一些关于信号和槽(并发出信号)的信息,但它是如何工作的,同时保持模型和视图的概念?
这可能在其他地方得到了回答,如果是这样,你能 link 给我来源吗?我找不到任何东西来解决我的问题。 感谢阅读,我希望有人能帮助我。
Header 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:
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?
}
要应用 model/view concept of Qt,您应该至少使用一个 class 模型。这种模型 classes 为多种类型的数据(字符串列表、树、sql 等)提供了统一的接口
为了显示数据,可以使用视图-class 或通过 QDataWidgetMaper
连接到模型的小部件在您的情况下,没有使用 model/view 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;
}