2012-02-12 28 views
10

Ho un QListWidget di calendari. Ogni QListWidgetItem è associato logicamente a un'istanza di Calendar, che è una classe che appartiene al lato Modello dell'applicazione.Memorizzazione dei puntatori utilizzando QListWidgetItem :: setData

È possibile memorizzare questa associazione sotto forma di puntatore utilizzando QListWidgetItem::setData? Quando tento di fare questo, ottengo il seguente errore:

error: 'QVariant::QVariant(void*)' is private

risposta

25

c'è un altro costruttore per void *: QVariant::QVariant(int typeOrUserType, const void * copy) dove si dovrebbe passare un intero univoco per rappresentare il tipo di puntatore.

Tuttavia, come indicato dalla documentazione, è possibile dichiarare il tipo di puntatore con Q_DECLARE_METATYPE(Calendar*) e utilizzare QVariant::fromValue<Calendar*>(...) e QVariant::value<Calendar*>() per archiviare e recuperare il valore.

O invece, perché si sta utilizzando un QListWidget invece di un modello regolare, si può solo sottoclasse QListWidgetItem, e aggiungere una variabile Calendar* membro con le funzioni di accesso necessarie, al fine di evitare il sovraccarico di utilizzare QVariant.

+0

+1, non suggerirebbe comunque il percorso di sottoclasse. (E nei casi in cui le conversioni di QVariant sono un problema di prestazioni, l'utilizzo di modelli/viste basati su oggetti sarà molto più). –

+0

ora lavora per me – user49557