2010-12-15 81 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

相關問題