Tenendo conto dei consigli ricevuti, direi che un modo di procedere potrebbe essere il seguente:
- sfrutto il file delle risorse (*.qrc), così le icone di default sono linkate staticamente;
- per ovviare al problema di possibili cambi futuri dell'icona di default, nel file delle risorse si può sfruttare l'alias del file stesso.
Se ad esempio, il file è icona1.png, e il prefisso nel file .qrc è /icon, nel file .qrc stesso troverò le seguenti righe
<qresource prefix="/icon">
<file alias="defaultIcona1">icona1.png</file>
</qresource>
Nel codice quindi, al posto del percorso ":/icon/icona1.png", trovo il suo alias, ":/icon/defaultIcona1", e in caso di modifica, l'unico punto in cui agire è il file delle risorse. Ne segue che è quindi inutile creare
codice:
#define ICONA1_PATH ":/icon/icona1.png"
salvo voler scovare errori di battitura a compile-time (v. anche sotto e precedente intervento di MItaly)
- per la possibilità di modifica da parte dell'utente, ci si appoggia ad un file delle risorse (.INI).
Credo che il ragionamento sia analogo sfruttando anche il registro di windows, ma per "credenze personali", meno lo si tocca, meglio è, quindi farò riferimento solo al file .ini
- diversamente da quanto pensato inizialmente, nel file .ini di default, non è necessario memorizzare l'indirizzo dell'icona di default, in quanto già QSettings prevede la restituzione di un valore di default, che ora è l'alias del file dell'icona. Quindi, dove prima avevo
codice:
QIcon(":/icon/icona1.png")
ora, definita "setting" l'istanza opportuna di QSettings, e definita K_ICONA1 la relativa chiave nel file .ini, ho
codice:
QIcon(setting.value(K_ICONA1,":/icon/defaultIcona1").toString());
In questo modo, se l'impostazione di default del programma non è stata cambiata, la chiave non c'è, e viene restituito il valore di default, ":/icon/defaultIcona1", mentre se la chiave è stata modificata, restituisce il valore che è stato memorizzato.
Dovrebbe funzionare.
Mi resta da provare cosa succede e/o come gestire il seguente caso: parto con l'icona di default, l'utente la modifica, lo stesso poi decide di tornare all'icona di default.
Devo capire infatti se, quando reimposto l'icona di default, è meglio usare
codice:
setting.remove(K_ICONA1)
cioè rimuovo completamente la chiave dal file .ini, oppure usare
codice:
setting.setValute(K_ICONA1,":/icon/defaultIcona1")
Pensavo di usare remove, in modo da avere il file .ini con il minor numero di chiavi possibili, anche se non dovrebbe costituire un grosso handicap qualche chiave in più o in meno, almeno credo, non ho eperienza a riguardo.
Sviluppi futuri:
- credo che lo stesso ragionamento possa valere per qualsiasi impostazione si voglia lasciare la possibilità di modifica da parte dell'utente;
- nel caso di programma usato da più utenti, e ognuno ha le sue configurazioni preferite, si possono memorizzare file .ini differenti, lasciando tutto invariato, ma cambiando semplicemente il modo con cui viene creata l'istanza di QSettings che permette l'accesso al file .ini, cioè trovare il modo in cui accedere mediante le medesime funzioni a file .ini diversi.

Originariamente inviata da
MItaly
Non necessariamente, dall'editor delle risorse puoi sempre definire un alias per il file, in modo che venga inserito nel file delle risorse con un nome diverso da quello del file/percorso che ha effettivamente a livello di file system.
Adesso credo di averne capito l'utilità

Originariamente inviata da
MItaly
Questo può essere utile più che altro per beccare a compile-time eventuali errori di battitura.
Prestando la dovuta attenzione, il problema diventa secondario, ma può sempre essere una risorsa da non dimenticare.

Originariamente inviata da
MItaly
Non la vedo come una cosa così essenziale in realtà, per due motivi:
- i punti dove fai riferimento alla stessa icona mi aspetto siano veramente pochi;
- il punto in cui vai a leggere il file di configurazione per caricare l'icona mi aspetto sia uno solo.
Per questo direi che almeno ICONA1_PATH è probabilmente abbastanza inutile.
Ok.
Grazie.