【问题标题】:Add copied text to a lineEdit when a button is pushed按下按钮时将复制的文本添加到 lineEdit
【发布时间】:2019-04-30 14:42:41
【问题描述】:

我刚开始阅读 QT,但我不太了解 SIGNAL SLOT 功能。 我有一个带有 2 QLineEdit 的表单,我想在单击按钮时将文本从第一个 QLineEdit 复制到第二个,但我不知道如何正确设置连接功能。

我尝试将 textChanged 函数与自身绑定,但结果是每次我按下一个字母时都会编辑文本,因为这是信号。

newForm::newForm() {
    widget.setupUi(this);
    connect(widget.nameEdit, SIGNAL(textChanged(const QString&)),
            this, SLOT(textChanged(const QString&)));
    connect(widget.pushMe, SIGNAL(pressed()),
            this, SLOT(handleButton()));
}
void newForm::handleButton(){
}

我想我必须在 handleButton 函数中做点什么,但我不明白如何从第一行读取和复制文本,因为 text() 在 handleButton 中不起作用

【问题讨论】:

  • 一种方法是直接访问小部件。第二种方法是在 newForm 类中设置一个 QString 变量,该变量在 textChanged() 成员函数中设置。

标签: c++ qt


【解决方案1】:

要在单击按钮时将文本从第一个 QLineEdit 称为 widget.nameEdit 复制到第二个 widget.nameEdit2,您可以使用 QLineEdit setText() 通过一个 SIGNAL/SLOT 连接来完成在lambda:

connect(widget.pushMe, &QPushButton::released,this, [=](){  
widget.nameEdit2.setText(widget.nameEdit.text());
};

您不需要使用第一个 QLineEdit textChanged() 信号,并且当您按下按钮时,上述连接将第一个字段中可用的整个文本一次复制到第二个字段。另一方面,如果您希望第二个 QLineEdit 在第一个字段中的文本更改时不断更新,那么您可以使用第一个字段的 textchanged() 信号到第二个字段的 setText()

connect(widget.nameEdit, &QLineEdit::textChanged,
            widget.nameEdit2, &QLineEdit::setText);

【讨论】:

    猜你喜欢
    • 2018-07-27
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多