[英]Can't get QSignalMapper to work
我正在使用C ++ Qt Framework制作应用程序。 我目前遇到的问题类似于提交表单。 我需要将客户端添加到系统中。 因此,当您单击“添加客户端”按钮时,它需要将QLineEdit中的文本和QDateEdit中的QDate提交给函数。
我研究的越多,似乎就越需要使用QSingalMapper,但我似乎根本无法使用它。
这是我首先尝试使用的代码片段。 我有一个带有名称和加入日期的客户数据结构,需要提交。 但是,我也可以创建Client对象,并将其作为参数insead传递给它(如果有更好的主意)。
QObject::connect(addClientBtn, SIGNAL(clicked()), this, SLOT(addClient(clientName->text(), joiningDate->date())));
当我尝试使用QSignalMapper时,它一直告诉我无法发送Client对象,因为它的类型不是QString,Widget *等。
有没有一种更容易被我忽略的方法? 任何帮助将不胜感激。
如果我对您的理解正确,则不需要QSignalMapper
,但是由于您几乎没有张贴任何代码,所以它很难告诉您。 特别是很难,因为我们不知道this
是什么。 但是,假设它是QDialog
或QMainWindow
,则必须执行以下操作:
在类定义.h中
...
protected slots:
void add_client();
...
在类实现.cpp中
mydialogormainwindow::mydialogormainwindow(){
QObject::connect(addClientBtn, SIGNAL(clicked()), this, SLOT(addClient()));
}
void mydialogormainwindow::add_client(){
QString name = clientName->text();
QDate date = joiningDate->date();
....
}
这是由于信号插槽连接。 信号发出一个信号,该信号包括已发送到插槽的参数。 单击的信号没有参数,因此无法将任何东西发送到插槽。 但是,由于插槽是在同一类中定义的,因此您可以直接在那里访问数据。
注意:仅当您的类是派生的QObject
(对于QDialog
和QMainWindow
就是这种情况)并且在类定义中具有Q_OBJECT
宏时,此方法才有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.