2010-12-15 29 views
1

我有一个小程序来显示设备和捕获任何数据包,用GUI.I使用QT设计器和Netbeans 6.9来绘制图形用户界面,但问题出现时,当我尝试实现一个信号/slot.Basically当选择组合框时,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没有selectedDev(int)信号。该文档提供了每个Qt类的信号和插槽的便捷列表:QComboBox documentation

您已在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))); 

我在做什么这里发射的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

我同意上面的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) emited信号列表,并不需要实现一个新的信号。

关于错误

你所得到的错误是真实的,正如你从上面通过发出qcombobox信号列表中看到,他们都不是QComboBox :: selectedDev(INT)这使得错误是有道理的。

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

感谢您的快速回复!我不知道QcomboBox,Qlineedit有他们自己的一套信号,我想我的selectedDev是多余的。 – user542966 2010-12-15 09:09:16

+0

@ user542966 - 你刚进入Qt的世界,很快所有这些对你来说都会变得很自然。你可以选择一个令人惊叹的框架。祝你的项目好运! – Raphael 2010-12-15 10:12:48

相关问题