C++ 从未调用QGraphicscene的缺点接地
我有一个类覆盖QGraphicscene的C++ 从未调用QGraphicscene的缺点接地,c++,qt,C++,Qt,我有一个类覆盖QGraphicscene的trackground,但从未调用我的trackground实现 class CtrlCutScene : public QGraphicsScene { Q_OBJECT public: CtrlCutScene(QObject *parent = 0); ~CtrlCutScene() {} protected: //added override to make the compiler check that signature
trackground
,但从未调用我的trackground
实现
class CtrlCutScene : public QGraphicsScene
{
Q_OBJECT
public:
CtrlCutScene(QObject *parent = 0);
~CtrlCutScene() {}
protected:
//added override to make the compiler check that signatures match
virtual void drawBackground(QPainter *painter, const QRectF &rect) override;
};
你知道我可能做错了什么吗?虽然询问者已经找到了他们案例的解决方案,但我只是在这里发布我案例的答案,因为这是谷歌针对这个问题的第一次点击 在我的例子中,我复制粘贴了一个网页上的函数签名,以确保它完全正确,并且没有打字错误 函数从未被调用过
class CtrlCutScene : public QGraphicsScene
{
Q_OBJECT
public:
CtrlCutScene(QObject *parent = 0);
~CtrlCutScene() {}
protected:
//added override to make the compiler check that signatures match
virtual void drawBackground(QPainter *painter, const QRectF &rect) override;
};
原因是函数名前面有一个不可见的Unicode字符U+FEFF。QtCreator编辑器尊重该角色的零宽度,因此即使在粘贴之后,它对我来说也是不可见的
void AnimScene::drawBackground(QPainter * painter, const QRectF & rect) { // Evil
void AnimScene::drawBackground(QPainter * painter, const QRectF & rect) { // Works
上面是带和不带该字符的行,用于比较。至少在预览中,Stackoverflow会将粘贴的U+FEFF(“零宽度非中断空间”)发布为U+200B(“零宽度空间”)。但是,同样的视觉效果 如果您遇到一个您认为可能由此影响引起的问题,检查的一种方法是关闭所有文件,然后转到“工具”菜单->“选项…”菜单项->“文本编辑器”部分->“行为”选项卡->“文件编码”面板->“默认编码”下拉列表,并将其更改为类似US-ASCII的内容。单击“确定”,然后重新打开文件
查看函数签名中是否有任何新字符显示为“未识别字符”框。不要保存,因为您可能会删除源中其他不想删除的扩展字符,而只需关闭文件并更改设置即可。然后重新打开文件,并重写包含方框的所有行。当询问者找到了他们案例的解决方案时,我只是在这里发布我案例的答案,因为这是谷歌针对这个问题的第一次点击 在我的例子中,我复制粘贴了一个网页上的函数签名,以确保它完全正确,并且没有打字错误 函数从未被调用过
class CtrlCutScene : public QGraphicsScene
{
Q_OBJECT
public:
CtrlCutScene(QObject *parent = 0);
~CtrlCutScene() {}
protected:
//added override to make the compiler check that signatures match
virtual void drawBackground(QPainter *painter, const QRectF &rect) override;
};
原因是函数名前面有一个不可见的Unicode字符U+FEFF。QtCreator编辑器尊重该角色的零宽度,因此即使在粘贴之后,它对我来说也是不可见的
void AnimScene::drawBackground(QPainter * painter, const QRectF & rect) { // Evil
void AnimScene::drawBackground(QPainter * painter, const QRectF & rect) { // Works
上面是带和不带该字符的行,用于比较。至少在预览中,Stackoverflow会将粘贴的U+FEFF(“零宽度非中断空间”)发布为U+200B(“零宽度空间”)。但是,同样的视觉效果 如果您遇到一个您认为可能由此影响引起的问题,检查的一种方法是关闭所有文件,然后转到“工具”菜单->“选项…”菜单项->“文本编辑器”部分->“行为”选项卡->“文件编码”面板->“默认编码”下拉列表,并将其更改为类似US-ASCII的内容。单击“确定”,然后重新打开文件
查看函数签名中是否有任何新字符显示为“未识别字符”框。不要保存,因为您可能会删除源中其他不想删除的扩展字符,而只需关闭文件并更改设置即可。然后重新打开文件,并重写包含框的所有行。这里没有太多内容。。。您是否也重写了'QGraphicsView::DruckGround()?没有。是吗?绝对不是!它会覆盖场景的
缺点(…)
-这就是我问的原因。请原谅我问了一个明显的问题,但是你是说你覆盖的函数从来没有被调用过,因为你在函数中放置了一个断点,它从来没有被命中,或者因为你没有看到你认为应该显示的内容?我发现了问题!相应的QGraphicsView的画笔必须设置为Qt::NoBrush。这里没有太多内容。。。您是否也重写了'QGraphicsView::DruckGround()?没有。是吗?绝对不是!它会覆盖场景的缺点(…)
-这就是我问的原因。请原谅我问了一个明显的问题,但是你是说你覆盖的函数从来没有被调用过,因为你在函数中放置了一个断点,它从来没有被命中,或者因为你没有看到你认为应该显示的内容?我发现了问题!相应QGraphicsView的画笔必须设置为Qt::NoBrush。