Qt C ++

时间:2016-10-07 10:16:49

标签: c++ qt qcombobox

尝试在QComboBox中连接新的选择更改,以便在插槽中使用该选择的字符串。

基本上,在currentIndexChanged信号之后,displayData mapp将已经保存从程序的另一部分(例如解析器)填充的所有数据,然后使用当前的selection comboBoxChange中的组合框,将为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;
}

1 个答案:

答案 0 :(得分:0)

在cpp中,您必须使用从QObject基类继承的连接函数。

connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method):
  1. 发件人:指向发件人的指针
  2. 信号:信号的定义。 SIGNAL()宏,带有信号名称和参数
  3. 接收器:指向接收器的指针
  4. 方法:接收方法的定义。 SIGNAL()或SLOT宏,带有接收器信号或功能的名称及其参数。
  5. 提示:连接是在运行时设置的。如果连接不正确,则没有编译器错误(仅限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);
    }