首页 > 解决方案 > 连接 2 个不同类别的信号(Qstring)和插槽(String)

问题描述

我有 2 类: MaFentre 类和代码

代码.h:

class Code : public QObject {

public :


explicit  Code(Q3DScatter *scatter);

    public slots:
 std::vector<point> readingData(std::string inputFileName);
}

MaFenetre.h:

class MaFenetre : public QWidget
{  Q_OBJECT
    public:
MaFenetre();
    private:
    QLineEdit *entry1;
}

代码.cpp:

std::vector<point> Code::readingData(std::string inputFileName){
// i read a file here
}

我在 MaFenetre 类的构造函数中创建了 Code 类对象

    Code *modifier = new Code(graph);

用于在插槽和信号之间建立连接

QObject::connect(entry1, SIGNAL(textChanged(QString)),modifier, SLOT(readingDara(std::string inputFileName)))

我知道参数必须是相同的类型,为此我尝试编码:

    QObject::connect(entry, SIGNAL(textChanged(QString.toStdString)),modifier, SLOT(readingDara(std::string inputFileName)))

但它不起作用

标签: c++qtsignalsslot

解决方案


您的信号和插槽参数不兼容。

您可以使用该lambda功能来解决此问题

 Code *modifier = new Code();
 MaFenetre * poMaFenetre = new MaFenetre();

 connect(poMaFenetre->Entry(), &QLineEdit::textChanged,
         [modifier](const QString & oText)
 {
     std::vector<int> data = modifier->readingData(oText.toStdString());
     // Handle data here...
 });

在里面MaFenetre

class MaFenetre : public QWidget
{
    Q_OBJECT
    public:
    MaFenetre() {entry1.reset(new QLineEdit());}
    QLineEdit *Entry() {return entry1.data();}
    private:
    QScopedPointer<QLineEdit> entry1;
};

推荐阅读