QT4/C++:没有这样的信号问题

QT4/C++:没有这样的信号问题,c++,qt4,netbeans-6.9,C++,Qt4,Netbeans 6.9,我有一个用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

我有一个用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。

QComboBox没有选择的默认信号。该文档为每个Qt类提供了一个方便的信号和插槽列表:

您已经在MainGUI类中定义了SelectedDevice信号,因此对连接的调用应该是这样的:要连接的参数是:信号源、信号、插槽或信号源、插槽或信号

QObject::connect(this,SIGNAL(selectedDev(int)),widget.MYMACBOX,SLOT(showmac(int)));
但这不会有任何影响,因为没有任何东西触发SelectedDevice信号

也许您可以尝试将组合框的currentIndexChangedint连接到所选的设备信号,如下所示:

QObject::connect(widget.comboBox,SIGNAL(currentIndexChanged(int)),this ,SIGNAL(selectedDev(int)));
我在这里做的是在组合框索引更改时触发MainGUI的SelectedDevice信号

如果您只是想在用户在组合框中选择某个内容时执行showmacint,那么您无法做到比这更简单的操作:

QObject::connect(widget.comboBox,SIGNAL(currentIndexChanged(int)),widget.MYMACBOX,SLOT(showmac(int)));
由于您对信号和插槽有点困惑,这里有一些链接可能会有所帮助:


这与我的博客无关,但对于任何以Qt开始的人来说,这是一个很好的Qt应用程序概述。QComboBox没有选择的默认信号。该文档为每个Qt类提供了一个方便的信号和插槽列表:

您已经在MainGUI类中定义了SelectedDevice信号,因此对连接的调用应该是这样的:要连接的参数是:信号源、信号、插槽或信号源、插槽或信号

QObject::connect(this,SIGNAL(selectedDev(int)),widget.MYMACBOX,SLOT(showmac(int)));
但这不会有任何影响,因为没有任何东西触发SelectedDevice信号

也许您可以尝试将组合框的currentIndexChangedint连接到所选的设备信号,如下所示:

QObject::connect(widget.comboBox,SIGNAL(currentIndexChanged(int)),this ,SIGNAL(selectedDev(int)));
我在这里做的是在组合框索引更改时触发MainGUI的SelectedDevice信号

如果您只是想在用户在组合框中选择某个内容时执行showmacint,那么您无法做到比这更简单的操作:

QObject::connect(widget.comboBox,SIGNAL(currentIndexChanged(int)),widget.MYMACBOX,SLOT(showmac(int)));
由于您对信号和插槽有点困惑,这里有一些链接可能会有所帮助:


这与我的博客无关,但对于任何开始使用Qt的人来说,这是一个很好的Qt应用程序概述。我同意上面的Raphael。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,不需要实现新信号

关于错误

您得到的错误是真的,正如您从上面的QCOMBOX发出的信号列表中看到的,没有一个是QCOMBOX::SelectedDevice,这使错误变得有意义

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

我同意上面拉斐尔的观点。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,不需要实现新信号

关于错误

您得到的错误是真的,正如您从上面的QCOMBOX发出的信号列表中看到的,没有一个是QCOMBOX::SelectedDevice,这使错误变得有意义

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

谢谢你的快速回复!我不知道QcomboBox,Qlineedit有自己的信号集,我想我选择的Dev是多余的。@user542966-你刚刚进入Qt的世界,很快所有这些都会变得自然。您已经选择了一个令人惊叹的框架,请确保这一点。祝你的项目好运!谢谢你的快速回复!我不知道QcomboBox,Qlineedit有自己的信号集,我想我选择的Dev是多余的。@user542966-你刚刚进入Qt的世界,很快所有这些都会变得自然。您已经选择了一个令人惊叹的框架,请确保这一点。祝你的项目好运!