c++ - 永远不会调用 qgraphicsScene 的 drawBackground

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

知道我可能做错了什么吗?

最佳答案

虽然提问者已经找到了他们案例的解决方案,但我只是在此处发布我的案例的答案,因为这是针对此问题的第一个谷歌搜索结果。

在我的例子中,我从网页上复制粘贴了函数签名,以确保我得到它绝对 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/

相关文章:

c++ - 错误 : ‘length’ was not declared in this scope c++

c++ - 测试用户输入数组中的重复项的最有效方法是什么?

c++ - 如何将菜单栏添加到 QWidget?

c++ - 基于文件路径/名称创建 QTreeWidget 目录?

c++ -/dev/dsp 窗口替代

c++ - boost::future - wait_callback 是否保证只被调用一次?

c++ - 使用 C++ 在 GNU/Linux 上编写控制台应用程序的正确方法

c++ - 自定义 QListView 中项目的图标和文本位置的正确方法是什么?

python - 将项目添加到已填充的组合框中

xml - 如何使用 QXmlStreamWriter 在 XML 文件中插入元素