2016-10-07 37 views
0

嘗試連接QComboBox中的新選擇更改以在插槽中使用該選擇的字符串。組合框選擇插槽和Qt中的信號C++

基本上,currentIndexChanged信號之後,displayData MAPP將已持有從程序(例如解析器)和另一部分填充,那麼所有的數據,使用在comboBoxChange組合框中的當前selection,鍵將給出到displayData映射,以便以tset結構的形式獲得所需的值。

下面是我所有的代碼設置和嘗試插槽和連接信號。請幫助理解如何做到這一點。

mainwindow.h

struct tset { 

    // struct declaration // 

QString name; 
double height; 
} 

class MainWindow : public QMainWindow { 

private slots: 

void comboBoxChange(QMap<QPair<QString, QString>, tset>& displayData, QString selection); 
} 

mainwindow.cpp

#include "mainwindow.h" 

//connect(ui->comboBox, &QComboBox::currentIndexChanged(const QString&), this,&MainWindow:: comboBoxChange(QMap<QPair<QString, QString>, tset>, QString selection)); 

connect(ui-> comboBox, &QComboBox::currentIndexChanged, this, &MainWindow::on_ comboBoxChange(QMap<QPair<QString, QString>, tset>, QString)); 


void MainWindow:: comboBoxChange (QMap<QPair<QString, QString>, tset> &displayData, QString s) { 
// use the selection string to decide which data to get from the QMap 
// from s derive blah and blah2 
tset test= = displayData.value(qMakePair(QString{"blah"}, QString{"blah2"})); 

qDebug() << test.name << test.height; 
} 
+0

對於一個啓動信號和SLOT需要有匹配的參數...詳細http://doc.qt.io/qt-5/signalsandslots.html – zeFrenchy

+0

@zeFrenchy讀這個我覺得他們確實有匹配參數.. –

+0

不是按照這個http://doc.qt.io/qt-5/qcombobox.html#currentIndexChanged – zeFrenchy

回答

0

在CPP,你必須使用從QObject的基類繼承的連接功能。

connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method): 
  1. 發件人:指針給發件人
  2. 信號:該信號的定義。 SIGNAL()宏與信號名稱和參數
  3. receiver:指向接收方的指針
  4. 方法:定義接收方法。 SIGNAL()或SLOT宏與接收信號或函數的名稱及其參數。

提示:連接在運行時設置。如果連接不正確,則沒有編譯器錯誤(僅QDebug消息)

connect(ui->comboBox, SIGNAL(currentIndexChanged(const QString&)), this, SLOT(comboBoxChange(const QString&))); 

以下是頭文件中的聲明。您已經忘記在聲明的頂部提及Q_OBJECT。您需要它爲所有包含信號或插槽的類。

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

    private slots: 
    void comboBoxChange(const QString& selection_text); 
} 
+0

關於'Q_OBJECT'你是對的,儘管爲了簡單起見,我在示例代碼中沒有提及它;例如我也省略了主窗口的銷燬,一些包括指令等。 我會嘗試其餘的建議,看看是否有幫助。 –