小编eud*_*xos的帖子

Qt 5.9 中的 QML 崩溃 - 帮助读取堆栈跟踪

我正在使用 Qt 5.9 编写一个应用程序,顶部是 C++ main 和 QML UI。一切正常(包括从 C++ 向 QML 发送信号)但是当我添加ChartView到 UI 时,我看到了崩溃。的精简版ChartView如下所示;当我从代码中省略它时,没有崩溃。

ChartView {
    id: _chartView
    LineSeries {
        name: "avgZ"
        XYPoint { x: 0; y: 0}
    }
}
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪(通过优秀的向后cpp

Stack trace (most recent call last):
#27   Object "", at 0xffffffffffffffff, in 
#26   Object "/home/eudoxos/pw/carxx/build/main-qt", at 0x561cceac54a9, in _start
#25   Source "/build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c", line 310, in __libc_start_main [0x7fafdf218b96]
#24   Object "/home/eudoxos/pw/carxx/build/main-qt", at 0x561cceac849b, in main
#23   Object "/usr/lib/x86_64-linux-gnu/libQt5Qml.so.5", at 0x7fafe297761c, in QQmlApplicationEngine::load(QUrl …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml qt5 qtcharts

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

用于访问其他类的项作为属性的代理类(__getitem__无限递归)

我有一个类LabelMapper(一个boost::python类),它实现了字典协议.我想有一个代理类,它将使用属性来访问该dicionary.我已经看过许多重写的帖子__setitem__,__getitem__但我似乎无法做到正确.

天真的方法(下面)导致无限递归,因为self.mapper调用LabelMapperProxy.__getattr__,反过来需要self.mapper等等.

class LabelMapper(object):
   def __init__(self): self.map={}
   def __getitem__(self,key): return self.map[key]
   def __setitem__(self,key,val): self.map[key]=val
   def __delitem__(self,key): del self.map[key]

class LabelMapperProxy(object):
   def __init__(self,mapper): self.mapper=mapper
   def __getattr__(self,key): return self.mapper[key]
   def __setattr__(self,key,val): self.mapper[key]=val
   def __delattr__(self,key): del self.mapper[key]

lm=LabelMapper()
lm['foo']=123

# construct the proxy
lmp=LabelMapperProxy(mapper=lm)
print lmp.foo                    # !!! recursion
lmp.bar=456
print lmp.bar,lm['bar']
Run Code Online (Sandbox Code Playgroud)

解决办法是什么?也许在标准库中预先煮好这样的代理?

python proxy-classes

2
推荐指数
1
解决办法
781
查看次数

用于访问作为参数传递的对象的不同成员的模板

我有一个函数来计算在邻居点集上定义的不同变量的梯度.算法总是相同的,但是根据计算的内容,访问邻居的不同成员数据,例如,当计算速度梯度时,使用Node::velocity,当计算应力梯度时,使用Node::stress.避免多次编写相同函数的最佳方法是什么?

我有几种可能性:

  1. 传递lambda函数(c ++ 0x)或可调用对象返回有问题的特定成员数据,称为like

    gradVelocity=computeGradient(listOfNeighbors,[](const Node& n){ return n.velocity; });
    
    Run Code Online (Sandbox Code Playgroud)

    减号是每次读取时的额外函数调用.

  2. 模板基于整数的函数说明正在计算的内容:

    enum{VAL_VELOCITY=0,VAL_STRESS,VAL_SOMETHING};
    template<int what> computeGradient(const std::list<Node>& neighbors){
        /*loop over neighbors*/
             value=(what==VAL_VELOCITY?neighbor.velocity:((what==VAL_STRESS)?neighbor.stress:neighbor.something);
        /* and so on */
    }
    
    /* called like this */
    gradVelocity=computeGradient<VAL_VELOCITY>(neighbors);
    
    Run Code Online (Sandbox Code Playgroud)

    它应该可能是有效的(希望编译器将在单个实例化中使用常量优化条件),但可读性和可维护性相当低.

一些更好的主意?

c++ templates class-members

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

将基实例指针转换为派生实例指针是否合法?(该实例不是派生实例)

我想Base从班级本身之外以不合格的方式(为什么?宏魔法)访问班级成员。策略是在Derived类中执行并将指向指针转换Base为指向指针Derived(即使实例不是a Derived)。

就我尝试而言,代码编译并正确运行:这是标准还是意外标准是UB)?链接

#include<iostream>

struct Base{
    int a=3;
};

struct Derived: public Base{
    int getA(){
        // this scope has unqualified access to Base class members
        return a;
    }
};

int main(void){
    Base b;
    std::cerr<<((Derived*)(&b))->getA()<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance pointers casting downcast

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

boost :: python :: class:以编程方式获取类名

我使用模板化的游标来为几个类定义统一的接口.为了定义__str____repr__方法,我想以编程方式"X"boost::python::class对象中获取类名(在引用文档中).那可能吗?

通过将类名作为参数传递给访问者的构造函数,可以很容易地处理它,但自动拥有它会更优雅.

visitor boost-python

0
推荐指数
1
解决办法
1292
查看次数