2010-11-11 9 views
14

numaralı yuvaya argümanları iletme Bir yuvaya argüman gönderemiyorum. Bir argümanı geçmezsem, işlev iyi geçer. Bir argümanı (integer) iletirsem, derlediğim zaman "No name type" ve "No slot no" hatalarını alıyorum. Benim başlığındaQt issue

, ben beyan:

private slots: 
void addButton(int); 
signals: 
void clicked(int) 

benim main.cpp, elimden:

int count; 
int count = 0; 
QPushButton* button = new QPushButton("Button"); 
_layout->addWidget(button); 
connect(button, SIGNAL(clicked(count), this, SLOT(addButton(count))); 

....

void Main::addButton(int count) { 

//do stuff with count 

} 

cevap

17

Sebastian, denediğiniz şekilde bunu yapamayacağınız doğrudur, ancak Qt size istediğiniz işlevi sağlayan bir sınıf sağlar.

QSignalMapper'a bakın. Bir tamsayı bir nesne/sinyal çiftiyle ilişkilendirmenize izin verir. Daha sonra doğrudan butona yerine sinyallerine bağlanırsınız.

+1

ah, işe yarayacak gibi görünüyor. Teşekkürler! –

8

sinyali ve yuvası aynı sayıda ve argüman (lar) türüne sahip olmalı ve sadece istediğiniz argümanı/değişkenleri, istediğiniz herhangi bir değişken veya değeri değil, yuvaya iletebilirsiniz.

+0

Denediğim şeyi (bulduğum bir örneğe göre) yansıtmak için yukarıdaki kodu düzenledim, ancak yine de çalışmıyor. –

+0

Tıklanan() - sinyali düğme sınıfı tarafından tanımlanmıştır, bunu değiştiremezsiniz (kendi düğme sınıfınızı yazıp yapmadığınız sürece, ancak bunun burada yapmaya çalıştığınız şeyin çözümü olduğundan şüpheliyim). –

3

Bu konuda üç sorun görüyorum.

Öncelikle, clicked() sinyali (parametre olmadan) QPushButton yaydığı, ancak (bir int parametresi ile) kendi sınıfında onu yeniden tanımlamak için çalışıyoruz. Bunu yapmak isterseniz:

SignalClass* objectWithSignals = new SignalClass; 
SlotClass* objectWithSlots = new SlotClass; 
connect(objectWithSignals, SIGNAL(a()), objectWithSlots, SLOT(b())); 

o zaman sadece zaten SignalClass tanımlanan sinyallere bağlanabilir. Başka bir deyişle, a() sinyali, SlotClass değil SignalClass'a ait olmalıdır.

(Aslında, clicked() QPushButton 'in temel sınıf QAbstractButton tanımlanmıştır.)

İkinci olarak, connect() işlevi içinde, kendi parametre tip sinyal ve yuva imzaları belirtmek gerekir. connect() işlevinin içinde count bulunduğunuz yer, int olmalıdır.

Ve üçüncü olarak, bağlanmak için aramanızdaki eksik bir destek var: SIGNAL(clicked(count)).

Bu yardımcı olur umarım.

+0

Sizin bir değişkenin isminin SIGNAL ve SLOT'a bağlantı çağrısında geçtiği argüman hatalarından bahseden tek cevabınız şaşırmış; "count" bir tür olmadıkça örnek kod asla derlenmez. – pixelgrease