2010-12-15 3 views
1

У меня есть небольшая программа для отображения устройств и захвата любых пакетов с помощью GUI. Я использую QT Designer и Netbeans 6.9 для рисования графического интерфейса, но проблема возникает, когда я пытаюсь реализовать сигнал /slot. При выборе комбинированного поля QlineEdit будет отображать MAC-адрес выбранного устройства. Ошибка:QT4/C++: нет таких проблем с сигналами

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 
} 

Я не знаю whts проблему здесь, я пробовал разные способы, чтобы обойти эту проблему , но они не будут работать. Для любых очевидных ошибок здесь я все еще новичок в QT4 (и libpcap).

ответ

5

QComboBox не имеет выбранного сигнала Dev (int). Документация предоставляет удобный список сигналов и слотов для каждого класса Qt: QComboBox documentation

Вы определили выбранный сигнал Dev (int) в своем классе MainGUI, чтобы ваш вызов для подключения был таким: (аргументы для подключения: источник сигнала, сигнал, слот или источник сигнала, слот или сигнал.)

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

Но это не будет иметь никакого эффекта, поскольку нет ничего обжиг (сигнал selectedDev INT).

Может быть, вы могли бы попытаться соединить currentIndexChanged поле со списком в (INT) для вашего selectedDev сигнала (INT), например:

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

Что я здесь делаю увольняет сигнал selectedDev (INT) из ваш MainGUI при изменении индекса со списком.

Если вы просто хотите выполнить showmac ​​(INT), когда пользователь выбирает что-то в поле со списком, вы не можете сделать его более простым, чем это:

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

Как швы, что вы немного запутался о сигналах & слотов здесь некоторые ссылки, которые могут помочь:

Signals & Slots from the Qt documentation

An introductory Qt article from my blog that explains how a very simple Qt application works (это не имеет ничего общего с ним будет мой блог, но это хороший обзор приложения Qt для анионного e начиная с Qt)

2

Я согласен с Рафаэлем выше. Qcombobox уже имеет сигнал, указывающий, что текущий выбор изменился. Это список сигналов emited по 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) 

Тот, что вам нужно для подключения к QLineEdit является void currentIndexChanged (int index) и не нужно реализовать новый сигнал.

Об ошибке

Ошибка вы получаете верно, как вы видите из списка сигналов, излучаемых QComboBox выше, ни один из них не является QComboBox :: selectedDev (интермедиат) что делает ошибка есть смысл.

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

Благодарим за быстрый ответ! Я не знал QcomboBox, у Qlineedit был свой собственный набор сигналов, я думаю, что мой selectedDev избыточен. – user542966

+0

@ user542966 - Ты просто входишь в мир Qt, скоро все это станет для тебя естественным. Будьте уверены в этом. Удачи вам в ваших проектах! – Raphael

Смежные вопросы