Qt连接两个信号和一个插槽

Posted

技术标签:

【中文标题】Qt连接两个信号和一个插槽【英文标题】:Qt connecting two signals and one slot 【发布时间】:2015-04-08 16:15:16 【问题描述】:

我有一个带有 QLabel、QTextEdit 和 QPushButton 的程序。

单击按钮时,我想将文本从 LineEdit 放入 Label。

我可以通过创建自己的插槽来做到这一点,但可以使用 Qt 插槽来完成吗?

我已经尝试过这段代码,但它不能按我的意愿工作......

this->connect(pushButton ,SIGNAL(clicked()), lineEdit, SIGNAL(textChanged(QString)), Qt::QueuedConnection);
t->connect(lineEdit, SIGNAL(textChanged(QString)) , label ,SLOT(setText(QString)), Qt::DirectConnection);

【问题讨论】:

【参考方案1】:

如果您需要强制用户按下 QButton 以将他/她在 QTextEdit 中键入的文本“应用”到 QLabel,也许您想检查插入文本的有效性,或者使用文本来实现一些目标或将其存储在变量中以供以后使用...因此您需要自定义插槽或自定义类。

相反,您可以将信号 QTextEdit.textChanged(QString) 连接到插槽 QLabel.setText(QString),因此在 QTextEdit 中键入的所有内容都会发送到 QLabel,而无需按下按钮。

但这一切都取决于你的目标。

【讨论】:

我知道,但这不是我想要的。我只是想知道是否可以按照我的方式去做......【参考方案2】:

我会这样做:

connect(ui->pushbutton, SIGNAL(clicked()), this, SLOT(slot_pushbutton_clicked()))

然后在slot_pushbutton_clicked 插槽中,

ui->label->setText(ui->lineEdit->text)

希望对你有帮助:)

【讨论】:

以上是关于Qt连接两个信号和一个插槽的主要内容,如果未能解决你的问题,请参考以下文章

信号和插槽的连接(关于 qlistview) - Qt

如何将信号和插槽与 qt 中的另一个对象连接 - 已解决

Qt - 使用 lambda 函数修改先前连接信号的插槽参数

Qt / Windows:在全局范围对象的构造函数中连接信号和插槽时崩溃

在 QObject 之间跨不同线程连接信号/插槽

将 Worker Thread 信号与 MainWindow 插槽连接时出错(Qt5)