2010-11-30 17 views
21

QT KeyPress işlevi aracılığıyla bir uygulamaya keyPresses benzetiyorum. Tüm KeyPress'ler iyi çalışıyor. Ancak şu anda aktif olan pencerenin OK düğmesine basması gereken QT::Key_Enter'u veya iptal düğmesi için QT::Key_Cancel'u geçtiğimde hiçbir şey yapmıyor.Bir widget'ın Qt'deki çocuklarına nasıl sahip olabilirsiniz?

Belki düşünüyorum, çünkü bu düğmeler odağa sahip değildir ve ana pencerenin kendisi vardır. Pencerenin çocuklarına nasıl sahip olabilirsiniz? ActiveWindow olarak ayarlayabilir ve daha sonra KeyPresses'i başarılı bir şekilde geçirebilmeniz için Tamam veya İptal düğmesini kullanabilirsiniz.

Ben: Belirli bir çocuğu almak için nesne adıyla findChild işlevini kullanabilirsiniz

QWidget *pWin = QApplication::activeWindow; 
QObjectList *pList = pWin->children(); 
//how do you iterate through the list and find the OK or Cancel button? 

cevap

44

.foreach veya QListIterator kullanarak listeden aynı ada sahip ve yinelenen tüm çocukları almak için de findChildren kullanabilirsiniz. Anahtar olayı yakalayabilir ve gerçekten ne olacağını görmek için widget'ı özel bir event filter koymak isteyebilirsiniz

QPushButton* button = pWin->findChild<QPushButton*>("Button name"); 
+0

QListIterator'ı nasıl kullanırım? – Owen

+0

Dokümantasyonda açıklanmıştır: http://doc.trolltech.com/4.7/qlistiterator.html#details –

+0

Evet, bunu okudum. Ama QWidget'in çocuklarının bir listesini aldığınızda farklı olduğunu düşünüyorum ... – Owen

2

:

deneyebileceğiniz bir düğme almak için.

İlgili konular