我正在使用C ++ Qt Framework制作应用程序。我目前遇到的问题与提交表格类似。我需要在系统中添加一个客户端。因此,当您单击“添加客户端”按钮时,它需要将QLineEdit和QDate中的文本从QDateEdit提交到函数。
我研究得越多,我就越需要使用QSingalMapper,但我似乎无法让它工作。
这是我尝试首先使用的代码片段。我有一个客户端数据结构,其中包含需要提交的名称和联接日期。但是,我也可以创建Client对象,并将其作为参数insead传递,如果这是一个更好的主意。
QObject::connect(addClientBtn, SIGNAL(clicked()), this, SLOT(addClient(clientName->text(), joiningDate->date())));
当我尝试使用QSignalMapper时,它一直告诉我无法发送Client对象,因为它不是QString,Widget *等类型。
是否有一种更容易的方法来做到这一点我忽略了?任何帮助将不胜感激。
答案 0 :(得分:2)
如果我理解正确,你不需要QSignalMapper
,但由于你几乎没有发布任何代码,因此很难说。特别困难,因为我们不知道this
是什么。但假设它是QDialog
或QMainWindow
,您必须执行以下操作:
.cpp 这是由于信号槽连接造成的。信号发出包括发送到时隙的参数的信号。单击的信号没有参数,因此无法向插槽发送任何内容。但是,如果在同一个类中定义了插槽,则可以直接访问那里的数据。 注意:仅当您的类是派生
类实现中的...
protected slots:
void add_client();
...
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
的情况)并且{{1}其类定义中的宏。