永远不会调用qgraphicsScene的drawBackground

时间:2013-06-05 18:50:12

标签: c++ qt

我有一个类覆盖QGraphicsScene的drawBackground,但我的drawBackground实现从未被调用过。

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;
};

知道我可能做错了吗?

1 个答案:

答案 0 :(得分:1)

虽然提问者已经找到了他们案例的解决方案,但我只是在这里发帖以获得答案,因为这是此问题的第一次谷歌搜索。

在我的情况下,我从网页上复制粘贴了功能签名,以确保我得到它绝对100正确并且没有错字。

这个功能从未被调用过。

原因是函数名称前面有一个不可见的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。单击“确定”,然后重新打开文件。

查看功能签名中的任何新字符是否显示为“无法识别的字符”框。不要保存,因为您可能会破坏源中其他地方的扩展字符,而不想破坏,而只需关闭文件并更改设置。然后重新打开文件,并重写包含这些框的所有行。