无法让QSignalMapper工作

时间:2015-03-03 09:30:13

标签: c++ qt

我正在使用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 *等类型。

是否有一种更容易的方法来做到这一点我忽略了?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果我理解正确,你不需要QSignalMapper,但由于你几乎没有发布任何代码,因此很难说。特别困难,因为我们不知道this是什么。但假设它是QDialogQMainWindow,您必须执行以下操作:

类定义 .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();
    ....
}

这是由于信号槽连接造成的。信号发出包括发送到时隙的参数的信号。单击的信号没有参数,因此无法向插槽发送任何内容。但是,如果在同一个类中定义了插槽,则可以直接访问那里的数据。

注意:仅当您的类是派生QObjectQDialogQMainWindow的情况)并且{{1}其类定义中的宏。