2010-12-15 69 views
1

J'ai un petit programme pour montrer les périphériques et capturer tous les paquets, avec GUI.J'utilise QT Designer et Netbeans 6.9 pour dessiner l'interface graphique, mais le problème vient quand j'essaye d'implémenter un signal /slot.Basiquement lorsqu'une liste déroulante est sélectionnée, un QlineEdit afficherait une adresse MAC du périphérique sélectionné. L'erreur:QT4/C++: pas de problème de signaux

Object::connect: No such signal QComboBox::selectedDev(int) in MainGUI.cpp:21 
Object::connect: (sender name: 'comboBox') 
Object::connect: (receiver name: 'MYMACBOX') 

MainGUI.h

#ifndef _MAINGUI_H 
#define _MAINGUI_H 

#include "ui_MainGUI.h" 

class MainGUI : public QDialog { 
    Q_OBJECT 
public: 
    MainGUI(); 
    virtual ~MainGUI(); 
    void displayDevices(); 
    void selectedValue(); 
public slots: 
    void showmac(int); 

    signals: 
    void selectedDev(int); 
private: 
    Ui::MainGUI widget; 
}; 

MainGUI.cpp

#include "MainGUI.h" 
#include "pcapCapture.h" 
#include <pcap.h> 
#include <iostream> 
MainGUI::MainGUI() // constructor 
{ 
    widget.setupUi(this); 
    //show devices here  
    QObject::connect(widget.comboBox,SIGNAL(selectedDev(int)),widget.MYMACBOX,SLOT(showmac(int))); 
} 
void MainGUI::showmac(int value) 
{ 
    //show MAC address here 
} 

Je ne sais pas whts le problème ici, j'ai essayé différentes façons de contourner ce problème , mais ils ne fonctionneront pas.Apologies pour toute erreur évidente ici, je suis encore nouveau à QT4 (et libpcap).

Répondre

5

QComboBox n'a pas de signalDev (int) sélectionné. La documentation fournit une liste pratique de signaux et d'emplacements pour chaque classe Qt:

Vous avez défini le signal selectedDev (int) dans votre classe MainGUI afin que votre appel à se connecter soit comme suit: (les arguments à connecter sont: source de signal, signal, source de fente ou un signal, une fente ou un signal.)

QObject::connect(this,SIGNAL(selectedDev(int)),widget.MYMACBOX,SLOT(showmac(int))); 

mais cela n'a aucun effet car il n'y a rien de tirer le signal de selectedDev (int).

Peut-être que vous pourriez essayer de connecter le signal currentIndexChanged de zone de liste déroulante (int) à votre selectedDev (int), comme ceci:

QObject::connect(widget.comboBox,SIGNAL(currentIndexChanged(int)),this ,SIGNAL(selectedDev(int))); 

Ce que je fais ici tire le signal selectedDev (int) de votre MainGUI lorsque l'index de la combo change.

Si vous voulez simplement exécuter showmac ​​(int) lorsque l'utilisateur de sélectionner quelque chose dans la zone de liste déroulante vous ne pouvez pas le faire plus simple que cela:

QObject::connect(widget.comboBox,SIGNAL(currentIndexChanged(int)),widget.MYMACBOX,SLOT(showmac(int))); 

Comme il coutures que vous êtes un peu confus sur les signaux & slots ici quelques liens qui pourraient aider:

Signals & Slots from the Qt documentation

An introductory Qt article from my blog that explains how a very simple Qt application works (il n'a rien à voir avec elle être mon blog, mais il est un bon aperçu d'une application Qt pour anyon e en commençant par Qt)

2

Je suis d'accord avec Raphael ci-dessus.Qcombobox a déjà le signal pour indiquer que la sélection actuelle a changé. Voici une liste des signaux emited par QComboBox

Signals 
void activated (int index) 
void activated (const QString & text) 
void currentIndexChanged (int index) 
void currentIndexChanged (const QString & text) 
void editTextChanged (const QString & text) 
void highlighted (int index) 
void highlighted (const QString & text) 

Celui que vous devez vous connecter à votre QLineEdit est void currentIndexChanged (int index) et ne avez pas besoin de mettre en œuvre un nouveau signal.

A propos de l'erreur

L'erreur que vous obtenez est vrai, comme vous le voyez dans la liste des signaux émis par QComboBox ci-dessus, aucun d'entre eux est QComboBox :: selectedDev (int) qui rend la l'erreur a un sens.

Object::connect: No such signal QComboBox::selectedDev(int) in MainGUI.cpp:21 
+0

Merci pour la réponse rapide! Je ne connaissais pas QcomboBox, Qlineedit avait son propre ensemble de signaux, je suppose que mon selectedDev est redondant alors. – user542966

+0

@ user542966 - Vous venez d'entrer dans le monde de Qt, bientôt tout cela deviendra naturel pour vous. Vous avez choisi un cadre étonnant soyez sûr de cela. Bonne chance avec vos projets! – Raphael