相关疑难解决方法(0)

设计模式,Qt模型/视图和多线程

我正在创建一个显示市场数据的应用程序,并以其他形式使用它.我将市场数据存储在地图中 std::map<tickerId, StockData>.让我举一个关于如何使用这个地图的例子.

  1. 网络在时间t发送封装库存数据的数据包. updatePrice(tickerId, latestPrice)
  2. 更新地图中的库存数据.现在,多个线程可以访问/更新数据.因此必须锁定映射以进行线程安全操作.这是第一个问题,我是否还需要锁定基础数据以进行更新?
  3. 新股票数据有多种用途,比如说IBM有价格更新,那么我需要在我的投资组合中更新IBM的价值.以及在屏幕上显示新数据.并且可以有其他几种同时使用.updatePosition(tickerId, price)updateStockScreen(tickerId, price).此外,从位置更新中分离Gui更新非常重要,因为GUI不是应用程序的主要优势.
  4. 我对如何实现这种类型的设计感到困扰.我在QT中阅读了有关模型/视图设计的信息,但是如果View线程从同一个地图读取,则必须将其锁定.这导致设计缓慢/低效.每次视图从模型中读取时,都需要锁定模型.这是在实时GUI中提供的吗?
  5. 总而言之,我已经将许多不同的对象存储为地图.对象实时更新.我需要更新它们,然后在不同的位置使用它们.如果有人能给我一个关于如何实现这种设计的小例子,那就太好了.

对有用书籍的一些参考也受到赞赏.

我是新人,并试图通过我的小知识实现太多,所以如果我问过愚蠢/形成错误的问题,请原谅我.

谢谢Shiv

c++ model-view-controller qt

12
推荐指数
1
解决办法
6719
查看次数

QTreeView和QAbstractItemModel&insertRow

我正在尝试为QTreeView实现QAbstractItemModel.我有插入行的问题.我注意到,如果我在我的应用程序的开头插入一切正常.但是如果我稍后插入行 - 在执行其他操作(如选择等)之后,新项目将保持不可见.而且QTreeView似乎根本不起作用!我是否必须发出一些信号来通知QTreeView有关行插入的信息?

这是我的插入方法:

bool LayersModel::insertRows(int position, int count, const QModelIndex  & parent)
{
    LayersModelItem * parentItem = getItem(parent);
    if (position > parentItem->childCount())
        return false;
    beginInsertRows(parent,position,position+count-1);
    bool result = true;
    for (;count;--count)
        result &= parentItem->insertChildren(position, new LayersModelItem());
    endInsertRows();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

LayersModelItem是具有QList及其子项和数据的类.

我的项目的完整代码(需要KDE库)在这里:https: //github.com/coder89/PhotoFramesEditor/tree/v0.0.8 要查看问题,请在主窗口中选择一个蓝色项目,然后右键单击它,选择"删除项目".(这个方法在Canvas :: removeItems())并且它是完整的评论 - 我很绝望,我试图找到这个问题的原因...(事实上它不是删除任何东西 - 它添加了新项目).

感谢您的帮助和建议!

qt qtreeview qabstractitemmodel insertion

5
推荐指数
1
解决办法
7508
查看次数