我有一个类覆盖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;
};
知道我可能做错了吗?
答案 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。单击“确定”,然后重新打开文件。
查看功能签名中的任何新字符是否显示为“无法识别的字符”框。不要保存,因为您可能会破坏源中其他地方的扩展字符,而不想破坏,而只需关闭文件并更改设置。然后重新打开文件,并重写包含这些框的所有行。