从外部访问类对象
Posted
技术标签:
【中文标题】从外部访问类对象【英文标题】:Accessing a class object from outside 【发布时间】:2021-06-09 10:33:06 【问题描述】:我在 TouchGFX Designer 上创建了一个基本项目,并使用 touchgfx 库在我自己的 cpp 文件中编写了一个函数。我希望在单击按钮时,从我自己的 cpp 文件中调用 ScreenView.cpp 或 ScreenViewBase.cpp 的函数并更改框的颜色。
这是我的 cpp 文件。
#include <touchgfx/Color.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <gui/screen1_screen/Screen1View.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
#include <touchgfx/widgets/Box.hpp>
ChangeColor::ChangeColor()
Screen1View::box1;
box1.setColor(touchgfx::Color::getColorFrom24BitRGB(51, 168, 35));
box1.invalidate();
这是我要调用函数的 Screen1View.cpp。
#include<gui/ChangeColor.hpp>
#include <touchgfx/Color.hpp>
Screen1View::Screen1View():
buttonCallback(this, &Screen1View::buttonCallbackHandler)
void Screen1View::setupScreen()
Screen1ViewBase::setupScreen();
button1.setAction(buttonCallback);
void Screen1View::tearDownScreen()
Screen1ViewBase::tearDownScreen();
void Screen1View::buttonCallbackHandler(const touchgfx::AbstractButton& src)
if (&src == &button1)
//Interaction1
//When button1 clicked execute C++ code
//Execute C++ code
//ChangeColor();
ChangeColor();
这是声明盒子的 Screen1BaseView.hpp
#define SCREEN1VIEWBASE_HPP
#include <gui/common/FrontendApplication.hpp>
#include <mvp/View.hpp>
#include <gui/screen1_screen/Screen1Presenter.hpp>
#include <touchgfx/widgets/Box.hpp>
#include <touchgfx/widgets/Button.hpp>
class Screen1ViewBase : public touchgfx::View<Screen1Presenter>
public:
Screen1ViewBase();
virtual ~Screen1ViewBase()
virtual void setupScreen();
protected:
FrontendApplication& application()
return *static_cast<FrontendApplication*>(touchgfx::Application::getInstance());
/*
* Member Declarations
*/
touchgfx::Box __background;
touchgfx::Box box1;
touchgfx::Button button1;
private:
;
我无法访问该框。有办法吗?
【问题讨论】:
【参考方案1】:TouchGFX 使用 MPV 架构,即 Model-Presenter-View。关键是Model和View不能互相访问。
在您的情况下,您的 cpp 文件扮演模型的角色,因此不允许访问 View 中的元素。这就是你无法访问的原因。您需要 Presenter 来处理连接。
【讨论】:
新演讲者意味着新观点,我错了吗?所以我将尝试访问已经存在的演示者。我该怎么做?有示例代码吗? presenter不代表view,实际上一个screen是由presenter和view组成的。在您的情况下,Screen1 = Screen1View + Screen1Presenter。 Screen1View 负责描述 Screen1 上显示的元素,而 Screen1Presenter 负责控制如何显示元素。只需将整个ChangeColor()复制到Screen1Presenter,然后在buttonCallbackHandler中调用presenter->ChangeColor()。请尝试自己了解 Model-Presenter-View 架构。我不能在这里向你详细解释。 如果我复制整个函数,那么拥有 ChangeColor.cpp 将毫无意义。我的目的是从外部访问视图。此外,我将整个功能复制到演示者,演示者无法访问box1。 我想告诉你要做什么的机制: 您按下屏幕上的按钮,视图会收到点击事件,在事件处理程序中,会调用演示者,然后演示者会调用模型(您的外部代码),一般来说,该模型将具有数据,例如您的颜色值。演示者将从模型中获取数据值,然后调用视图更改颜色。如果你还是不知道怎么写代码,把你的代码全部贴出来,我可能会尝试为你一一修改。以上是关于从外部访问类对象的主要内容,如果未能解决你的问题,请参考以下文章