2013-04-10 14 views
6

La mia applicazione Qt ha un foglio di stile di grandi dimensioni con molti margini, pixel e altre cose direttamente basate sul disegno e sulla grafica. Sarei felice di dare tutte queste cose al designer, ma il foglio di stile è contenuto nel file .ui che non è conveniente per il designer; preferirebbe vedere un file separato e modificarlo usando i suoi soliti strumenti.Come spostare un foglio di stile Qt in un file esterno ma tenerlo compilato in risorse?

Quello che voglio è spostare il foglio di stile in un file .qss esterno, aggiungendo quel file alle risorse del programma e collegandolo al file .ui, in modo che il foglio di stile venga compilato e utilizzato automaticamente dal widget e l'applicazione non dovrebbe mantenere il file del foglio di stile e caricarlo in fase di runtime.

Come raggiungerlo?

risposta

11

Copia tutti i tuoi stili in un file e rinominalo in qualcosa come stylesheet.qss Quindi includilo nel tuo file qrc come un nuovo elemento risorsa. Puoi farlo semplicemente modificando il tuo file qrc, se ne hai già uno. Refer documentation su come aggiungere una nuova risorsa.

Quindi modificare il codice in questo modo per leggere il contenuto del file qss in fase di esecuzione e applicare gli stili all'applicazione.

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

    QFile file(":/stylesheet.qss"); 
    if(file.open(QIODevice::ReadOnly | QIODevice::Text)) 
    { 
     a.setStyleSheet(file.readAll()); 
     file.close(); 
    } 

    MainWindow w; 
    w.show(); 

    return a.exec(); 
} 

Nota: quando si fa un cambiamento nel stylesheet.qss, è necessario compilare il file qrc per le modifiche abbiano effetto.

+1

abbastanza e dritto Semplice al punto, grazie! –

+0

Anche questa risorsa è molto utile: [https://www.youtube.com/watch?v=sWIQIi4lg58](https://www.youtube.com/watch?v=sWIQIi4lg58) – nono

+0

Non so perché, ma il codice sopra non ha funzionato per me (Qt 5.9.1). Ho convertito QByteString in QString e tutto ora funziona: 'QString style (file.readAll()); a.setStyleSheet (stile); ' – semanser

2

Ho impostato il foglio di stile quando l'applicazione viene eseguita da un file esterno. Inoltre, per il designer abbiamo aggiunto un pulsante per "ricaricare il foglio di stile". In questo modo il progettista può modificare il file e provare immediatamente le modifiche.

Ad esempio:

QFile styleFile("stylesheet.qss"); 
styleFile.open(QFile::ReadOnly); 
QByteArray bytes = styleFile.readAll(); 
QApplication *app = (QApplication*)QApplication::instance(); 
app->setStyleSheet(newStyleSheet); 
Problemi correlati