[英]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應用程序的很好概述)
我同意上面的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.