2013-04-10 8 views
6

Benim Qt uygulama marjlar, piksel ve diğer şeyler bir sürü doğrudan dayanan ve çizim ve grafikleri ile ilgili olan büyük bir stil var. Ben tasarımcı için tüm bu maddeleri vermek için mutlu olurdu, ama stil tasarımcısı uygun değil .ui dosya içinde tutulur; Ayrı bir dosyayı görmeyi ve her zamanki araçlarını kullanarak düzenlemeyi tercih ederdi.Nasıl harici dosyaya bir Qt stil taşımak ancak kaynaklarda derlenmiş tutmak?

İstediğim şey, stil sayfasını harici bir .qss dosyasına taşımak, bu dosyayı program kaynaklarına eklemek ve .ui dosyasına bağlamak, böylece stil sayfasının otomatik olarak widget tarafından derlenmesi ve kullanılması; stil sayfası dosyasını tutmak ve çalışma zamanında yüklemek zorunda kalmaz.

Bunu nasıl elde etmek için?

cevap

11

Tüm stillerinizi bir dosyaya kopyalayın ve stylesheet.qss gibi bir şeye yeniden adlandırın. Ardından, qrc dosyanızda yeni bir kaynak öğe olarak ekleyin. Zaten varsa Sadece senin qrc dosyasını düzenleyerek yapabilirsiniz. Yeni bir kaynak ekleme hakkında Refer documentation. Daha sonra çalışma zamanında qss dosyasının içeriğini okumak ve stilleri uygulamanıza uygulamak için bu şekilde kodunuzu değiştirebilirsiniz.

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(); 
} 

Not: stylesheet.qss bir değişiklik yaptığınızda, değişikliklerin etkili olması için qrc dosyayı derlemek gerekiyor.

+1

, teşekkürler! –

+0

Bu ressource da çok kullanışlıdır: [https://www.youtube.com/watch?v=sWIQIi4lg58](https://www.youtube.com/watch?v=sWIQIi4lg58) – nono

+0

Neden olduğundan emin değilsiniz, ancak yukarıdaki kod benim için çalışmadı (Qt 5.9.1). QByteString'i QString'e ve şu anda çalışan her şeye dönüştürdüm: 'QString stili (file.readAll()); a.setStyleSheet (stil); ' – semanser

2

Uygulama harici bir dosyadan çalıştırıldığında stil sayfasını ayarlıyorum. Ayrıca, tasarımcı için 'stil sayfasını yeniden yüklemek' için bir düğme ekledik. Bu şekilde tasarımcı dosyayı değiştirebilir ve değişiklikleri hemen deneyebilir. Örneğin

:

noktaya yeterince ve düz Basit
QFile styleFile("stylesheet.qss"); 
styleFile.open(QFile::ReadOnly); 
QByteArray bytes = styleFile.readAll(); 
QApplication *app = (QApplication*)QApplication::instance(); 
app->setStyleSheet(newStyleSheet); 
İlgili konular