在 Qt 中一次将相同的操作分配给 gridLayout 中的多个按钮

Assigning same action to multiple buttons in gridLayout at once in Qt

我刚开始使用 Qt Designer,我不知道如何将相同的操作分配给更多的按钮。我创建了一个 gridLayout 17x17,由 289 个按钮组成。我希望每个按钮在单击时都能更改其文本。可能吗?

你想把之前选中的按钮的文字复制到另一个按钮上,你要声明一个属性吗class我会调用text,选中的文字会被保存,我会调用之前选择的按钮previousBtn,那么每次点击,都必须写入那个变量。

text = previousBtn->text();

我们可以通过itemAtPosition函数得到QGridLayout的所有QLayoutItem,然后我们通过widget()函数得到widget并转换为qobject_cast,将它连接到onClicked插槽,得到用sender()生成它的按钮并将其转换为QPushButton,并放置新文本。

*.h

private:
    QString text;

private slots:
    void onClicked();

*.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    for(int i=0; i < ui->gridLayout->rowCount(); i++)
        for(int j=0; j < ui->gridLayout->columnCount(); j++){
            QLayoutItem* item = ui->gridLayout->itemAtPosition(i, j);
            if(item->widget()){
                QPushButton* btn = qobject_cast<QPushButton *>(item->widget());
                connect(btn, &QPushButton::clicked, this, &MainWindow::onClicked);
            }
        }
}

void MainWindow::onClicked()
{
    QPushButton *btn = qobject_cast<QPushButton *>(sender());
    btn->setText(text);
}