我有一个重写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;
};

知道我做错了什么吗?

最佳答案

询问者找到了解决方案的同时,我只是在此处发布我的问题的答案,因为这是该问题的第一条Google搜索结果。

就我而言,我从网页上复制粘贴了函数签名,以确保我绝对正确地输入了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的名称。单击确定,然后重新打开您的文件。

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

关于c++ - 永远不会调用qgraphicsScene的drawBackground,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16947593/

10-12 19:00