Qt插槽和信号。获取插槽接收器对象

时间:2016-07-04 14:10:34

标签: c++ qt qt5.5

我有一个QLineEdit,我想连接到QLabel,以便根据输入的文本的有效性。这样做我有两个问题。

QLineEdit *text = new QLineEdit(this);
layout->addWidget(text, rowno, 0);
QLabel *button = new QLabel(this);
button->setStyleSheet("QLabel { background-color : green; color : white; }");
button->setAlignment(Qt::AlignCenter);
button->setText("OKAY");
QObject::connect(text, SIGNAL(textEdited(const QString &)), button, SLOT(CheckValidity(const QString &)));

这不会将QLineEdit中所做的任何更改连接到我的自定义插槽。我无法弄清楚为什么! 同样在自定义插槽中,我想根据传递的QString更改标签的背景颜色。如何获得标签的参考?它作为信号的接收者出现,但我无法找到引用它的方法。

3 个答案:

答案 0 :(得分:1)

CheckValidity不是QButton的插槽,它是在您自己的类中定义的自定义插槽(我假设,因为您没有指定它)。

所以,将最后一行改为:

QObject::connect(text, SIGNAL(textEdited(const QString &)), this, SLOT(CheckValidity(const QString &)));

如果您想了解发件人对象,请使用qobject_cast

QLabel *sender_label = qobject_cast<QLabel*> (sender ());

答案 1 :(得分:0)

  1. public partial class ThisRepository : IRepository { } public partial class ThatRepository : IRepository { } 中没有FirstName位置(为什么Func<IRepository, string>CheckValidity?)。连接尝试后检查调试器的输出窗口。
  2. QLabel +演员。演员可能是buttonQLabel,看看他们在Qt助理中的差异。

答案 2 :(得分:0)

如果要在插槽调用中提供其他参数,可以使用lambda而不是插槽:

QObject::connect(text, &QLineEdit::textEdited, [=](const QString &text) { checkValidity(button, text); });