2016-04-14 37 views
0

numaralı telefona aktarın Qt uygulama resmini başka bir cihaza gerçek zamanlı olarak aktarmak istiyorum. Bu yüzden, MainScreen widget'ını tüm içerikleriyle birlikte işlemek ve bazı iletişim kanallarına bir bitmap olarak aktarmam gerekiyor.Qt uygulaması görüntüsünü Qt

render için yapılan çağrı sayısını en aza indirgemek istiyorum çünkü CPU pahalı, ancak aynı zamanda kullanıcı arabirimindeki tüm değişiklikleri de seçmek istiyorum.

Yani ben paintEventQWidget-> hale komutu koymak için çalıştı, ama özyinelemeli rötuş hataya neden oldu.

Uygulama çerçevesini özensiz rötuşlama hataları olmadan yakalamanın en iyi yolu nedir?

+0

[QWidget :: grab] (http://doc.qt.io/qt-5/qwidget.html#grab) ne aradığınızı değil mi? –

+0

Bu, bir çerçeveyi kapmak için başka bir işlevdir, ancak bahsettiğim gibi sorun, etkinleşmesinin zamanlamasıdır. Zamanlayıcı ile etkinleştirmek, zamanlayıcı yavaşsa veya zamanlayıcının çok hızlı olması durumunda çok fazla yük olması durumunda eksik olaylara neden olabilir. PaintEvent etkinleştirme, yinelemeli repaints hatasına neden olur. – Alex

cevap

0

Bu en iyi çözüm olmayabilir, ancak daha önce çağrılmışsa render() numaralı çağrıyı atlayarak yinelemeyi kaldırabilirsiniz.

void paintEvent() { 

    ... 

    if(! m_rendering) { // m_rendering must be class member variable 
     m_rendering = true; 
     render(); 
     m_rendering = false; 
     return; 
    } 

    ... 

} 

Ama MainScreen ait paintEvent() denir eğer yalnızca hale unutmayın. Yani bir çocuk widget'ının repaint'lerini kaçırma olasılığınız yüksektir. Gereksinim duyduğunuz kare hızına bağlı olarak QTimer kontrollü update() numaralı çağrıyı kullanarak bunu çözebilirsiniz.

+0

Bu olası çözüm olabilir, deneyeceğim. – Alex