【问题标题】:QT4 / C++ : no such signals problemQT4 / C++:没有这样的信号问题
【发布时间】:2010-12-15 07:53:41
【问题描述】:

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

【问题讨论】:

    标签: c++ qt4 netbeans-6.9


    【解决方案1】:

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

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

    如果您只是想在用户在组合框中选择某些内容时执行 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 应用程序的一个很好的概述,适合任何从 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 ) 并且不需要实现新信号。

      关于错误

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

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

      【讨论】:

      • 感谢您的快速回复!我不知道 QcomboBox,Qlineedit 有自己的一组信号,我猜我的 selectedDev 是多余的。
      • @user542966 - 你刚刚进入 Qt 的世界,很快所有这些对你来说都会变得自然。你已经选择了一个惊人的框架,请确保这一点。祝你的项目好运!
      猜你喜欢
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多