0

これは特に Qt に関する質問ではなく、プログラミング経験の欠如に関する質問だと思います。

QTreeWidgetItem からクラスを派生させ、いくつかのブール フラグを追加しました。QTreeWidget を初期化するときに、そのうちの 2 つを追加します。

_NewItem1=MyQTreeWidgetItem(_treewidget);

後で私はいくつかのアイテムを追加します

_NewItem1_1=MyQTreeWidgetItem(_NewItem1);
_NewItem1_1->boleanvalue1=true;

後でこれらのアイテムを返品したい場合は、電話します

(MyQTreeWidgetItem)_NewItem1->child(i)

しかし、これはもちろん、新しく初期化されたブール値フラグを持つ MyQTreeWidgetItem を返すだけです。

以前に初期化した真のアイテムを返すために子関数をオーバーライドする必要がありますか?

4

1 に答える 1

1

_NewItem1->child(i)QTreeWidgetItemの基本クラスであるへのポインタを返しますMyQTreeWidgetItem。あなたがキャストしたのは安全ですMyQTreeWidgetItem、それを考慮に入れるとそれも本物かもしれませんQTreeWidgetItem。これは、実行時にタイプをチェックするC++のdynamic_castで実現されます。

QTreeWidgetItem *item = _NewItem1->child(i);
MyQTreeWidgetItem *myItem = dynamic_cast<MyQTreeWidgetItem>(item);
if (myItem) {
    qDebug() << myItem->boleanvalue1;
} else {
    qDebug() << item << "is not of type MyQTreeWidgetItem";
}

一方、型キャスト演算子()では、この種の変換が可能であれば、チェックなしで任意の型を他の型に変換できます。たとえば、ポインタをQTreeWidget型のオブジェクトに変換したとしますMyQTreeWidgetItem。その後の変数へのアクセスにより、実行時エラーまたは予期しない結果が発生します。

于 2012-11-06T12:29:59.250 に答える