繁体   English   中英

2个不同类别的连接信号(Qstring)白色插槽(String)

[英]connect signal (Qstring) whit slot (String) of 2 different class

我有2类:MaFentre类和Code类

code.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;
}

Code.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)))

但它不起作用

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

您可以使用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;
};

使用信号和插槽与调用函数和传递参数不同。

首先,信号和插槽必须具有相同的参数类型,这意味着它们必须使用相同的参数进行定义。 在您的情况下,您必须更改插槽以适合可能的信号。 另请注意,在调用插槽时,返回值是无用的,因此更好的方法是保持功能不变,将其移至专用区域并创建包装器插槽:

void Code::readingDataSlot(QString inputFileName)
{
    std::vector<point> result = readingData( inputFileName.toStdString() );
    // Do what ever you need with result vector
}

并将其连接到信号。

connect(entry1, SIGNAL(textChanged(QString)),modifier, SLOT(readingDataSlot(QString)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM