小编kjo*_*ppy的帖子

我们如何在另一个boost ptree中插入boost ptree作为节点?

我想在C++中序列化分层数据结构.我正在研究的项目使用boost,因此我将其boost::property_tree::ptree用作我的数据节点结构.

我们有更高级别的结构,比如Person包含较低级别结构的实例Job(每个人都有工作).Person并且Job每个都实现一个ptreeify方法.我们的想法是通过让每个对象调用ptreeify它包含的每个其他对象来序列化层次结构.然后,生成的子对象的属性树作为节点插入到包含对象的属性树中.问题是我无法弄清楚如何实际插入.

此SO帖子之后导致运行时错误.我缺乏了解导致它的原因所需的知识/经验.见下面的代码.

我也发现了这个非常相似的问题,但我根本不理解答案,我怀疑使用insert避免复杂的问题.

问题:如何在另一个属性树中插入属性树作为节点?

这是实际的代码.运行时错误发生在Person::ptreeify.

#include <boost/property_tree/json_parser.hpp>
using boost::property_tree::ptree;
using namespace std;

struct Job{
    std::string title;
    int hoursPerWeek;
    ptree ptreeify(void); //return a ptree representing this Job
    };

ptree Job::ptreeify(){
    ptree pt;
    pt.put("title", title);
    pt.put("hours", hoursPerWeek);
    return pt;
    }

struct Person{
    std::string name;
    Job job;
    ptree ptreeify(void); //return a ptree representing this Person
                          //This must iterively call ptreeify …
Run Code Online (Sandbox Code Playgroud)

boost-propertytree

3
推荐指数
1
解决办法
3832
查看次数

QGraphicsView/QGraphicsScene大小匹配

如何制作具有指定大小的QGraphicsScene和QGraphicsView来监视具有相同大小的场景?

这听起来像一个愚蠢的问题,但请考虑以下测试代码[1]

import sys
from PyQt4 import QtGui, QtCore

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.scene = QtGui.QGraphicsScene(0, 0, 200, 200, self)
        self.view = QtGui.QGraphicsView(self.scene, self)
        #self.view.setMaximumSize(200, 200)
        self.setCentralWidget(self.view)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    win = MainWindow()
    win.show()
    sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到一个QGraphicsView的小窗口,没有滚动条.如果我收缩窗口滚动条出现,因为我使视图小于场景的指定大小.如果我放大窗口,条形图会消失,视图会随窗口大小调整.所有这些都是有道理的.

现在我再次运行相同的代码但是注释行(前面带有#)未注释.窗口显示在里面,但视图有滚动条.当我缩小窗口时,视图也会缩小,但是当我放大窗口时,视图只会扩大到一定的大小.这并不奇怪.什么令人惊讶的是,与它的视图的最大尺寸,滚动条仍然存在.我不明白这一点,因为视图的最大大小与代码中场景的大小明确匹配.

为什么会这样?

我知道其他问题已经解释了如何强制场景和视图适合在一起,但我想了解我实际制作的视图和场景大小,因此我尝试使用明确指定的大小.

[1]我正在使用PyQt,C++用户只需将"self"视为"this",将"import"视为"#include"

编辑:下面接受的答案绝对正确.我想添加其他人阅读此内容,如果您的视图在布局中,您还必须考虑布局边距.这些可以在QtDesigner等中明确设置.

qt pyqt qgraphicsview qgraphicsscene

3
推荐指数
1
解决办法
1802
查看次数