1

これはQtでも可能ですか?特定の描画用のデリゲートを使用して QListWidget をセットアップしましたが、QListWidget の親の変数に基づいてデリゲートを別の方法で描画しようとしています。どちらかへのポインターがある限り、何かを装備できると思いますが、デリゲートの paint() 内で何らかの方法でそれらを取得する必要があります。

QVariant にポインターを格納するために「ハック」を試みましたが、機能していないようで、このアプローチを採用したくありません。デリゲートが表すアイテムへのポインターを取得でき、item->listWidget() を呼び出すだけでよいのであれば、これは完璧ですが、デリゲート内では不可能のようです。

これを達成するための回避策はありますか?

また、単に.. void* トリックを機能させようとするサンプル - これがこれを行う唯一の方法である場合、おそらく誰かが私が間違っていることに気付くかもしれません。

//Parent of QListWidget
....
QListWidgetItem *item = new QListWidgetItem();
....
QVariant v = qVariantFromValue((void *) pStitchSymbolCustom);
item->setData(Qt::UserRole + 6, v);
....


//Implemented QAbstractItemDelegate
....
MyClass* p_pointer = 
    (MyClass*)(index.data(Qt::UserRole + 6).value<void *>());
4

1 に答える 1

1

あなたの質問を正しく理解できたかどうかはわかりませんが、デリゲートを含む QListWidget にアクセスしたい場合は、デリゲートの親を listwidget として設定し、次に取得するのが最も簡単な方法だと思いますデリゲートの任意の時点で listwiget:

QAbstractItemDelegate * delegate = new MyItemDelegate(myListWidget);

myListWidget.setItemDelegate(delegate);

次に、デリゲート コードで:

QListWidget * listWidget = qobject_cast<QListWidget*>(parent());

//You can do whatever you want your list here

オブジェクト ツリーが深く、コードを汎用化し、目的の親がどこにあるかを気にしない場合は、ツリーを自動的に上に移動する必要があります。

QListWidget * listWidget = 0;
QObject * object = parent();
while (object && ! listWidget) {
    // qobject_cast will succeed once the parent of the correct type is reached
    listWidget = qobject_cast<QListWidget*>(object);
    object = object->parent();
}
于 2012-08-05T21:47:05.400 に答える