簡體   English   中英

C++ QT5 文本編輯 append

[英]C++ QT5 TextEdit append

  1. 連接

    {connect(ui->add, SIGNAL(clicked()),ui->text,SLOT(text.append(line)));}

  2. question I want to add a function that is appended to the lower text window when I enter a string in the upper line window and click Add, but the function does not work.

您可以將您的按鈕連接到 lambda 插槽以執行您想要的 Qt5 樣式,如下所示:

connect(ui->add, &QPushButton::clicked, this, [this]() {
    ui->text->append(line);
} );

我假設您的 'ui->add' 是按鈕,而 'ui->text' 是 QTextEdit? 如果是這種情況,按照 Farshid616 的建議,您需要使用lambda 為什么? 兩個原因:

  1. Qt 的 Signals & Slots中,如果要將參數傳遞給 SLOT,則需要在 SIGNAL 中將其返回。 在您的情況下, clicked()不返回任何內容(請參閱此處的 function 簽名),而append(const QString &text)需要一個字符串(請參閱此處)。
  2. Lambda 是一種通過使用connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)來克服此問題的簡單方法,我們使用 lambda 作為函子(參見下面的示例)。 這是一個重載的連接調用(請參閱此處的簽名)。
QObject::connect(your_button, &QPushButton::clicked, [this]() {
    your_text_edit->append(your_line_edit->text());
} );

注意:您需要在 lambda 中“捕獲” this (當前 object 指針),以便允許訪問your_text_edityour_line_edit ,它們是this的成員(即this->your_text_editthis->your_line_edit )。 this的捕獲是通過引用。 如果我們更明確地編寫上面的代碼,您可以更清楚地看到這一點:

QObject::connect(this->your_button, &QPushButton::clicked, [this]() {
    this->your_text_edit->append(this->your_line_edit->text());
} );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM