2011-04-27 4 views
0

probablement ce que je demande est très facile, mais je suis coincé! :(QT et les cases à cocher problème

i ont un QWidget dans lequel je charge un QGridLayout dans lequel j'ajouter un certain nombre de QCheckBox « es

je ne peux pas sembler comprendre comment attraper le signal ChangeState des cases à cocher ... .

les cases à cocher sont ajoutées dans une boucle, dans laquelle je crée une nouvelle QCheckBox qui et en ajoutant comme un widget à l'QGridLayout ...

que dois-je connecter? chaque bouton de changent le signal à ma fente personnalisée, ou som Ething autre?

le code que j'utilise est

QGridLayout *myLayout = new QGridLayout; 
for (int i=0; i<(int)m_List.size(); i++) 
{ 
    QCheckBox *button = new QCheckBox; 
    button->setText(m_List[i].m_strName.c_str()); 
    button->setIcon(QIcon(m_List[i].m_strThumbNailPath.c_str())); 
    button->setIconSize(QSize(50, 50)); 
    button->setCheckable(true); 
    myLayout->addWidget(button); 
    connect(button, SIGNAL(stateChanged), this, SLOT(checkboxStateChanged)); 
} 


myLayout->setRowStretch(2, 10); 
myLayout->setColumnStretch(2, 10); 

QWidget *myWidget = new QWidget; 
myWidget->setLayout(myLayout); 

myToolbox = new QToolBox; 
myToolbox->addItem(myWidget, "Options"); 

il affiche correctement les cases à cocher, je peux vérifier et les décocher, mais je ne peux pas attraper le signal ... ce que je suis absent? Merci!

Répondre

3

Votre connexion est problématique (pas de signature):

connect(button, SIGNAL(stateChanged), this, SLOT(checkboxStateChanged)); 

ajouter les parementers à: stateChanged et checkboxStateChanged

devrait être quelque chose comme:

connect(button, SIGNAL(stateChanged(int)), this, SLOT(checkboxStateChanged(int))); 

Vous obtiendrez l'état de case à cocher dans le paramètre int checkboxStateChanged comme l'un des

valeurs ENUM, voir here

+2

En fait, OP devrait probablement se connecter à 'SIGNAL (toggled (bool))'. 'SIGNAL (stateChanged (int))' n'est intéressant que pour les cases à cocher tristate (rarement utilisées). Et oui, [la documentation] (http://doc.trolltech.com/4.7/qcheckbox.html) est un peu trompeuse ici ('toggled (bool)' est défini dans 'QAbstactButton' à la place). –

+0

Eh bien, je viens de répondre à sa question (-: – snoofkin

+0

Je souhaite, pour chaque réponse utilisant des signaux/slots de style ancien, certains des utilisateurs les plus avancés passeraient et répondraient en utilisant de nouveaux signaux et slots de style. – neuronet

2

Oui, la réponse sera probablement donné Soul Surfer fixer votre connexion, mais pas votre problème, il y a un plus gros poisson à frire. Comment allez-vous comprendre quel bouton a été cliqué (je suppose que c'est important)?

Pour comprendre quel bouton a été cliqué, vous devez utiliser QSignalMapper ou QButtonGroup.

Hope this helps.