QT4/C++:没有这样的信号问题
我有一个用GUI显示设备和捕获任何数据包的小程序。我使用QT Designer和Netbeans 6.9绘制GUI,但当我尝试实现信号/插槽时,问题就出现了。基本上,当选择组合框时,QlineEdit将显示所选设备的MAC地址。 错误: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
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的世界,很快所有这些都会变得自然。您已经选择了一个令人惊叹的框架,请确保这一点。祝你的项目好运!