首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Qt 將按鈕文字傳遞給搜索框:使用 QSignalMapper 統一處理

     編輯:程式設計疑難解答

界面有多個按鈕(如標籤、分類),點擊後將按鈕文字填入 QLineEdit 搜索框。傳統做法為每個按鈕寫一個槽函數,代碼冗餘。

QSignalMapper 方案(Qt 5)

QSignalMapper *mapper = new QSignalMapper(this);
connect(btn1, &QPushButton::clicked, mapper, static_cast(&QSignalMapper::map));
connect(btn2, &QPushButton::clicked, mapper, static_cast(&QSignalMapper::map));
// ...
mapper->setMapping(btn1, btn1->text());
mapper->setMapping(btn2, btn2->text());
// ...
connect(mapper, static_cast(&QSignalMapper::mappedString),
        this, [this](const QString &text) {
            lineEdit->setText(text);
        });

Qt 6 / 現代寫法:Lambda 捕獲

auto connectBtn = [this](QPushButton *btn) {
    connect(btn, &QPushButton::clicked, this, [this, btn]() {
        lineEdit->setText(btn->text());
    });
};
connectBtn(btn1);
connectBtn(btn2);
// ...

Lambda 更簡潔,無需額外對象,推薦 Qt 5.10+ 使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved