Bagaimana cara membuat Widget Qt bertambah dengan ukuran jendela?

89

Saya ingin memiliki yang kecil QFormLayoutyang tumbuh untuk mengisi widget induknya.

Saya membuat file .ui baru menggunakan QWidgettemplate di Qt Designer. Saya meletakkan QFormLayoutdi dalam 'jendela' itu, lalu meletakkan beberapa kontrol di dalamnya QFormLayout.

Ini semua bekerja dengan cukup baik, tetapi QFormLayoutselalu tetap pada ukuran yang saya tetapkan di Qt Designer. Saya ingin QFormLayoutuntuk mengisi widget induknya dan mengembangkan / menyusutkannya.

Bagaimana saya bisa mencapai itu?

bastibe
sumber

Jawaban:

130

Di Designer, aktifkan centralWidget dan tetapkan tata letak, misalnya tata letak horizontal atau vertikal. Kemudian QFormLayout Anda akan secara otomatis mengubah ukurannya.

Gambar Desainer

Selalu pastikan, bahwa semua widget memiliki tata letak! Jika tidak, pengubahan ukuran otomatis akan rusak dengan widget itu!

Lihat juga

Kontrol bersikeras untuk menjadi terlalu besar, dan tidak akan mengubah ukuran, di QtDesigner

Jens
sumber
13
QtDesigner terkadang bisa sedikit membingungkan.
bastibe
30
oh, TERIMA KASIH untuk itu! :-) Saya telah menatap QtDesigner (yah, QtCreator, hal yang sama di sana) selama setengah jam dan tidak tahu mengapa widget sentral saya tidak berubah ukuran secara maksimal - sampai saya melihat bahwa ikon kecil kecil Anda yang dilingkari di jawaban Anda memiliki tanda 'cacat' merah di atasnya. satu klik pada tombol 'lay out vertically' di toolbar pembuat dan masalahnya teratasi. Pertama kali saya melihat toolbar itu BTW, mudah untuk dilewatkan ...
ssc
8
Untuk mengomentari jawaban Jens: Di mac, klik widget level atas (tidak harus bernama "centralWidget") lalu klik "Form" di bilah menu dan pilih salah satu tata letak.
hnasarat
2
Jika ada yang masih bertanya-tanya, ini dilakukan pada Windows di QT5.8 / QT Creator 4.2.1 dengan mengklik "centralWidget" tingkat atas (yang memiliki tanda merah kecil di atasnya) dan kemudian pergi ke Tools> Form Editor> Lay Out Secara vertikal (atau horizontal).
LeoR
41

Saya merasa tidak mungkin untuk menetapkan tata letak ke centralwidget sampai saya menambahkan setidaknya satu anak di bawahnya. Kemudian saya dapat menyorot ikon kecil dengan tanda 'nonaktif' merah dan kemudian mengklik tata letak di toolbar Designer di bagian atas.

Jillian Beuschel Marohnic
sumber
4
Ini menjengkelkan. Menetapkan tata letak ke widget pusat harus menjadi operasi paling sepele di Qt Creator. Sebaliknya, hal ini membutuhkan menggabungkan solusi ini sangat unintuitive dengan Jens ' solusi sama unintuitive ( dalam urutan yang tepat ). Sementara otomatisasi yang disediakan oleh Qt Creator masih mengalahkan boilerplate berulang dengan selisih yang lebar, meretas pengalaman pengguna yang mengerikan (UX) telah memberi saya kedutan mata baru.
Cecil Curry
@Cecil Curry bahkan setelah solusi itu butuh waktu 20 menit untuk menyadari apa yang harus saya ... karena centralWidget hanya dalam kasus ketika tidak ada opsi menu konteks untuk menambahkan tata letak ... hanya tombol mikroskopis di bilah alat yang terlihat hampir seperti tidak aktif
Swift - Pai Jumat
3
Menulis komentar ini karena bahkan setelah solusi di sini, saya kesulitan menemukan opsi. Anda harus memilih centralWidget, lalu klik kanan di beberapa ruang kosong aplikasi Anda, buka 'Layout' di menu konteks yang terbuka dan kemudian pilih tata letak yang Anda inginkan. Ini berhasil untuk saya, setidaknya (QT5, menggunakan QT Designer 5.11.1).
kushy
11

Jawaban yang diterima (gambarnya) salah, setidaknya sekarang di QT5. Sebagai gantinya Anda harus menetapkan tata letak ke objek / widget root (menunjuk ke gambar yang disebutkan di atas, itu harus menjadi MainWindowbukan centralWidget). Perhatikan juga bahwa Anda harus memiliki setidaknya satu yang QObjectdibuat di bawahnya agar ini berfungsi. Lakukan ini dan ui Anda akan menjadi responsif terhadap perubahan ukuran jendela.

Nikos
sumber
0

Anda perlu mengubah jenis tata letak default objek QWidget tingkat atas dari tipe tata letak Break ke jenis tata letak lainnya (Tata Letak Vertikal, Tata Letak Horizontal, Tata Letak Kisi, Tata Letak Formulir). Sebagai contoh: masukkan deskripsi gambar di sini

Untuk sesuatu seperti ini:

masukkan deskripsi gambar di sini

Linh Dao
sumber