簡體   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