Qt WidgetsにおけるQGraphicsTextItem::anonymous (enum)の解説と代替方法


QGraphicsTextItem::anonymous は、QGraphicsTextItem クラスの仮想関数 type() が返す値を表す列挙体項目です。これは、QGraphicsItem クラスの派生クラスである QGraphicsTextItem オブジェクトの種類を識別するために使用されます。

QGraphicsTextItem::anonymous の値は QGraphicsItem::Type::Text です。これは、QGraphicsTextItem オブジェクトがテキストアイテムであることを示します。

QGraphicsTextItem* textItem = new QGraphicsTextItem("Hello, World!");
QGraphicsItem::Type type = textItem->type();

if (type == QGraphicsItem::Type::Text) {
  // オブジェクトはテキストアイテムです。
} else {
  // オブジェクトはテキストアイテムではありません。
}
  • 列挙体項目 QGraphicsItem::anonymous は、Qt ドキュメントでは公式に定義されていませんが、Qt ソースコードで使用されています。
  • QGraphicsTextItem::type() 関数は、QGraphicsItem クラスの他の派生クラスについても同様の値を返します。


#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsTextItem>

int main(int argc, char* argv[]) {
  QApplication app(argc, argv);

  // シーンを作成
  QGraphicsScene scene;

  // テキストアイテムを作成
  QGraphicsTextItem* textItem = new QGraphicsTextItem("Hello, World!");

  // シーンにアイテムを追加
  scene.addItem(textItem);

  // ビューを作成
  QGraphicsView view(&scene);
  view.resize(400, 300);
  view.show();

  // オブジェクトの種類を検査
  QGraphicsItem::Type type = textItem->type();

  if (type == QGraphicsItem::Type::Text) {
    qDebug() << "オブジェクトはテキストアイテムです。";
  } else {
    qDebug() << "オブジェクトはテキストアイテムではありません。";
  }

  return app.exec();
}

このコードを実行すると、次の出力がコンソールに表示されます。

オブジェクトはテキストアイテムです。


代替方法として、以下の方法が考えられます。

QGraphicsItem::type() 関数を使用する

QGraphicsItem::type() 関数は、QGraphicsItem オブジェクトの種類を表す QGraphicsItem::Type 列挙体項目を返します。QGraphicsTextItem::anonymous の値と同じ QGraphicsItem::Type::Text を返すため、同様の目的で使用できます。

QGraphicsItem::Type type = textItem->type();

if (type == QGraphicsItem::Type::Text) {
  // オブジェクトはテキストアイテムです。
} else {
  // オブジェクトはテキストアイテムではありません。
}

dynamic_cast<QGraphicsTextItem*>() 関数を使用する

dynamic_cast<QGraphicsTextItem*>() 関数は、QGraphicsItem オブジェクトを QGraphicsTextItem オブジェクトにダウンキャストします。ダウンキャストが成功した場合は、QGraphicsTextItem ポインタが返されます。失敗した場合は、nullptr が返されます。

QGraphicsTextItem* textItemPointer = dynamic_cast<QGraphicsTextItem*>(item);

if (textItemPointer) {
  // オブジェクトはテキストアイテムです。
} else {
  // オブジェクトはテキストアイテムではありません。
}

qobject_cast<QGraphicsTextItem*>(item) マクロを使用する

qobject_cast<QGraphicsTextItem*>(item) マクロは、dynamic_cast<QGraphicsTextItem*>() 関数と同様の機能を提供します。

QGraphicsTextItem* textItemPointer = qobject_cast<QGraphicsTextItem*>(item);

if (textItemPointer) {
  // オブジェクトはテキストアイテムです。
} else {
  // オブジェクトはテキストアイテムではありません。
}

item->isInstanceOf<QGraphicsTextItem>() メソッドを使用する

QGraphicsItem クラスは、isInstanceOf<T>() メソッドを提供します。このメソッドは、オブジェクトが T 型のインスタンスであるかどうかを返します。

if (item->isInstanceOf<QGraphicsTextItem>()) {
  // オブジェクトはテキストアイテムです。
} else {
  // オブジェクトはテキストアイテムではありません。
}