1

我有一个覆盖drawBackgroundQGraphicsScene 的类,但我的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;
};

知道我做错了什么吗?

4

1 回答 1

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 的内容。单击确定,然后重新打开您的文件。

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

于 2015-02-14T03:23:50.303 回答