【问题标题】:Compiler complains 'QTransform::QTransform(bool)' is private when using public bool, why?编译器在使用公共布尔时抱怨“QTransform::QTransform(bool)”是私有的,为什么?
【发布时间】:2016-03-07 09:07:40
【问题描述】:

qt类的第一个块是:

class Q_GUI_EXPORT QTransform
{
public:
    enum TransformationType {
        TxNone      = 0x00,
        TxTranslate = 0x01,
        TxScale     = 0x02,
        TxRotate    = 0x04,
        TxShear     = 0x08,
        TxProject   = 0x10
    };

显然它不是私人的。

当我现在尝试编译我的程序时,编译器会抱怨这一行:

QGraphicsScene scene;
item = scene.itemAt(50, 50, QTransform::TxNone);

它给了我:

错误:'QTransform::QTransform(bool)' 是私有的

inline QTransform(bool)
       ^

接着是:

错误:在此上下文中

 item = scene.itemAt(50,50,QTransform::TxNone);
                                             ^

但我不知道是什么让编译器假定 QTransform::TxNone 是尝试调用 QTransform 方法。

那我做错了什么? 以及如何明确我指的不是方法,而是我发布的第一个 sn-p 中看到的类的公共枚举?

【问题讨论】:

  • QTransformQObjectQWidget 的子类吗?
  • 您没有显示itemAt 的定义。但是错误信息表明第三个参数实际上是一个QTransform对象,而不是一个枚举实例

标签: c++ qt


【解决方案1】:

问题来了:

QGraphicsItem * QGraphicsScene::itemAt(qreal x, qreal y, const QTransform & deviceTransform) cons

它接受一个QTransform 对象...

QTransform()
QTransform(qreal m11, qreal m12, qreal m13, qreal m21, qreal m22, qreal m23, qreal m31, qreal m32, qreal m33 = 1.0)
QTransform(qreal m11, qreal m12, qreal m21, qreal m22, qreal dx, qreal dy)
QTransform(const QMatrix & matrix)

但是没有可以将你使用的枚举转换为转换对象的构造函数

【讨论】:

  • 呸,打败我。有一个构造函数可以将枚举转换为QTransform,也就是private QTransform(bool),它解释了错误信息。
  • enum 基本上是一个int,您可以将int 隐式转换为bool。它具有误导性,但在文档中没有提到接受 QTransform::TransformationType 的 ctor
猜你喜欢
  • 2012-12-11
  • 2016-11-01
  • 1970-01-01
  • 2017-01-17
  • 2012-09-12
  • 2016-04-22
  • 2012-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多