尝试在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;
}
答案 0 :(得分:0)
在cpp中,您必须使用从QObject基类继承的连接函数。
connect(const QObject * sender, const char * signal, const QObject * receiver, const char * method):
提示:连接是在运行时设置的。如果连接不正确,则没有编译器错误(仅限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);
}