![](/img/trans.png)
[英]Problems in connect signal/slot, qRegisterMetaType() QList<QString>
[英]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.