通过逻辑层中的类转发QProgressBar更新的正确方式是什么
What is the proper way to forward QProgressBar updates through classes in the logic layer?
我正在使用QProgressBar,并且已经知道如何通过以下过程从逻辑层中的特定类发送进度:
- 在视图图层类中设置连接
- 在逻辑层类中创建信号信号
- 修改所述逻辑层类,使得其为QObject
- 调用QObject作为逻辑层的基类构造函数
现在,我希望逻辑层中的特定类通过另一个类发送进度。
例如:
- A类(在视图层中):为B类中的进度创建连接
- B类(在逻辑层):为C类中的进度创建连接
- 类C:更新进度,以便在类A(视图层)中看到
我试图模仿这个过程来使用从类B到C的连接和信号,但它似乎不起作用。
任何答案都将不胜感激
我会在逻辑层和ui层之间创建一个称为服务层的中间层,并放入接口类来连接这两个层。这个服务层的基础是从ui接收消息,并知道从逻辑层返回什么。然后,您的服务层会将消息发送到逻辑层,然后它可以创建您期望从逻辑层返回的类的虚拟实现。填充到混凝土层,并将其传递回ui层。这可能有点令人困惑,但这是因为它确实令人困惑。这是一个被称为n层应用程序或许多其他名称的大主题,但一本关于设计模式的好书可能会对处理一个需要c++接口的项目有所帮助,但你可能总是可以通过用c#等其他语言应用的设计模式来抽象这些想法。希望这能有所帮助,很抱歉,这不是你可以直接打字和看到的东西,但我相信,对你的尝试有一个很好的了解会比解决临时信号槽机制问题更有益。如果你确实提供了更多的代码,我可能能够诊断你的当前情况。
您可以使用SIGNAL/SIGNAL连接转发具有兼容签名的信号。在下面的代码示例中,重要的部分是LogicClass1的构造函数中的连接。
// My other logic class
class LogicClass1 : public QObject
{ Q_OBJECT
public:
LogicClass1(LogicClass2* lc2)
: lc2(lc2)
{
connect(lc2, SIGNAL(signalPrograssIteration(int)),
this, SIGNAL(signalPrograssIteration(int)));
}
signals:
void signalPrograssIteration(int);
private:
LogicClass2 *lc2;
};
// My other logic class
class LogicClass2 : public QObject
{ Q_OBJECT
public:
LogicClass2(){}
signals:
void signalPrograssIteration(int);
private:
void doSomething();
};
// the function that actually does stuff
void LogicClass2::doSomthing()
{
int val = 0;
for(...)
{
.
.
emit signalPrograssIteration(val);
.
.
}
}
您可以在QObject::connect的文档中看到类似的示例。
好吧,我想明白了。我所做的是将peogress-bar对象从MainWindow(视图层)发送到LogicClass1(逻辑层)然后将其与SIGNAL连接到CCD_ 1。
当然,LogicClass1
应该继承前面提到的QObject-
class LogicClass1 : public QObject
{
Q_OBJECT
.
.
.
最重要的是(因为我忘了):右键单击项目并"Run qmake":)
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 从另一个类中更新QProgressBar
- 通过逻辑层中的类转发QProgressBar更新的正确方式是什么
- 设置QProgressBar从逻辑层更新的正确方法是什么?