繁体   English   中英

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

[英]QT4 / C++ : no such signals problem

我有一个使用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没有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应用程序的很好概述)

我同意上面的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM