QWidget sınıfını alt sınıflara ayırarak yeni bir pencere öğesi oluşturuyorum. Her zaman korunacak olan bu widget için bir oran (yüksekliği ve genişliği için) ayarlayabilmek istiyorum.Yeniden boyutlandırma sırasında alt sınıf bir QWidget'ın en boy oranını koruyarak görüntüle
Bunun için her zaman, Qt5 belgelerini, Google ve Stackoverflow'u kullanarak arama yaptım. Açıkçası, cevapları buldum: özellikle this one. Ama ne yazık ki bir tane bile tam etkilidir:
- Ayar
sizeIncrement
Widget Ben resizeEvent aşırı çalışan bir pencere - , ama gerçekten nasıl yapılacağını bilmiyorsanız bile, tamamen hiçbir şey yapmaz Bu ... Ben this answer, iki şey izlerseniz
: istediğim gibi Widget üst düzey pencere ise
- oran hiç korunmaz, bunu yeniden boyutlandırabilirsiniz.
- Bu pencere öğesi bir düzende yerleştirilirse, yalnızca pencerenin hem genişliğini hem de yüksekliğini artırırsam, oran korunur. Ancak genişliği veya yüksekliği çok artırdığım anda, widget düzleşir. Bunun yerine, düzenin, widget'in oranını korumak için boyutunu otomatik olarak ayarlamasını isterim.
Yani, nasıl bir subclassed QWidget en boy oranını korumak için yönetmek olabilir?
Çalıştığım başka bir gönderi, en azından QLabel 'ler için iyi çalışıyor. http://stackoverflow.com/questions/8211982/qt-resizing-a-qlabel-containing-a-qpixmap-while-keeping-its-aspect-ratio – phyatt
"QWidget :: heightForWidth()" ifadesini yeniden denemeyi denediniz mi? Bu, bir en boy oranı belirtmenize izin verir. Bu yeterli değilse, widget'ınızı 3x3 QGridLayout'ta, widget'ınızı ortada ve QSpacerItem'in kenarlarında tutmak için bir "kukla" QWidget oluşturun (bkz. 'QGridLayout :: addItem() '). QSpacerItem'in yeniden boyutlandırırken gerektiğinde fazladan boşluk bırakabilir (veya 0'a kadar boyutlandırılabilir). Muhtemelen 'QGridLayout :: setColumnStretch()' ve 'QGridLayout :: setRowStretch()' kullanmanız gerekir. – Anthony
İkinize de teşekkürler, çözümleriniz işe yarıyor, ancak aynı sorun devam ediyor: Yalnızca widget'ın genişliğini artırmaya çalışırsam, en boy oranı artık korunmaz. – Spirine