1

我有一个小程序来显示设备并使用 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)的新手。

4

2 回答 2

5

QComboBox 没有 selectedDev(int) 信号。该文档为每个 Qt 类提供了一个方便的信号和插槽列表:QComboBox 文档

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

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)));

我在这里所做的是在组合框索引更改时触发 MainGUI 的 selectedDev(int) 信号。

如果您只是想在用户在组合框中选择某些内容时执行 showmac(int) ,那么您不能比这更直接:

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

看起来您对信号和插槽有点困惑,这里有一些可能会有所帮助的链接:

Qt 文档中的信号和插槽

一篇来自我的博客的介绍性 Qt 文章,它解释了一个非常简单的 Qt 应用程序是如何工作的(它与我的博客无关,但它是对 Qt 应用程序的一个很好的概述,适用于从 Qt 开始的任何人)

于 2010-12-15T07:57:26.520 回答
2

我同意上面的 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 )并且不需要实现新信号。

关于错误

您得到的错误是正确的,正如您从上面 qcombobox 发出的信号列表中看到的那样,它们都不是QComboBox::selectedDev(int)这使得错误有意义。

Object::connect: No such signal QComboBox::selectedDev(int) in MainGUI.cpp:21
于 2010-12-15T08:41:22.590 回答