QT4 / C ++: проблем с такими сигналами нет - PullRequest
1 голос
/ 15 декабря 2010

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

 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
}

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

Ответы [ 2 ]

5 голосов
/ 15 декабря 2010

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

Вы определили сигнал selectedDev (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)));

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

Сигналы и слоты из документации Qt

Вступительная статья Qt из моего блога, которая объясняет, как работает очень простое приложение Qt (это не имеет никакого отношения к тому, что это мой блог, но это хороший обзор приложения Qt для всех, кто начинает с Qt )

2 голосов
/ 15 декабря 2010

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

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