Bir sonraki durumum var: Tek bir statik kütüphanede widget oluşturmanız gerekiyor, bu da son uygulama ile bağlantılı olacak (visual C++ 9.0, qt 4.5). Bu statik pencere öğesi kitaplığı bazı kaynakları (simgeler) içerir ve birkaç .cpp dosyasından oluşur (her biri bağımsız pencere öğesi içerir). Bildiğim kadarıyla, "q_INIT_RESOURCE (resource_file_name)" çağrısıyla, statik kütüphanede (kaynaklar) kullanırsam qt kaynak sistemini başlatmalıyım.Statik kitaplığa yerleştirilmiş qt kaynaklarını başlatma
yerine benim ilk yaklaşım, ben başlatma kodu ile statik kütüphane projesinde ayrı init.cpp dosyası oluşturduk
#include <QAbstractButton>
namespace {
struct StaticLibInitializer
{
StaticLibInitializer()
{
Q_INIT_RESOURCE(qtwidgets_custom_resources);
}
};
StaticLibInitializer staticLibInitializer;
}
// ... widget code ....
(başlatma dahil önlemek için: I (statik kitaplığında her .cpp dosyasında) aşağıdaki kodu ile bu çözüldü kod her .cpp dosyasında), ama bu işe yaramadı.
Neden bu işe yaramadı?
StaticLibInitializer ile bu yaklaşım çeşitli derleyiciler ve platformlar arasında güvenli ve taşınabilir mi?
Geçerli durumumda üç .cpp dosyam var (bunların her biri kendi widget'ını uygular, ikisi de .qrc dosyasından kaynak kullanır), ancak orijinal soruda verdiğim başlatma kodu, bunlardan yalnızca birinde ve tüm çalışmalarda ince (% 100, 50/50 değil). Bu yüzden anlayamıyorum, neden başlangıç kodunu ayrı bir init olarak koydum.cpp dosyası Kaynaklarımı kullanamıyorum, ancak bu kodun widget'larından biri olan .cpp dosyasında her şey düzgün çalışıyorsa ... – cybevnm
İşe yaramıyor, iyi çalışıyor ** şimdi ** :) Sadece kaza ile çalışıyor. Başka bir derleyiciyi veya aynı derleyicinin başka bir sürümünü kullanmaya başladığınız an çalışmayı durdurabilir. ** ** DOLAYLI DAVRANIŞ **. Şu anda çalışmasının nedeni, öncelikle widget'ların birindeki derleyici kodunda bir başlatma kodu bulunduğunda ** kaynaklarınızı ilk önce başlatmanızın ** sebebidir. Saf şans, başka bir şey değil. Programınızı% 0 güneşli bir günde çalışmak istemiyorsanız, * statik başlatma sırasından * kaçınmak için talimatları izleyin. –
Derleyici tarafından derleme aşamasında tanımlanan statik başlatma sırasını mı, yoksa yeniden başlatma programları (yeniden derleme olmadan) arasında değişiklik olabilir mi? – cybevnm