微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Qt使用函数将多个信号与插槽连接起来

如何解决Qt使用函数将多个信号与插槽连接起来

如果我点击按钮,我想设置字体颜色和背景颜色。

我刚刚在mainwindow.h文件添加了这两个函数

public:
    void createGrid();

private slots:
    void clickCell(int row,int col);

mainwindow.cpp

QVector<QVector<QPushButton*>> buttons(10);

void MainWindow::createGrid() {
    qframe *frame = new qframe(this);
    qgridLayout *layout = new qgridLayout(frame);

    layout->setMargin(0);
    layout->setSpacing(0);

    for(int i = 0; i < 10; ++i){
        buttons[i].resize(10);

        for(int j = 0; j < 10; ++j){
            QPushButton *button = new QPushButton("0");

            button->setMinimumSize(50,50);
            button->setMaximumSize(50,50);

            connect(button,SIGNAL(released()),this,SLOT(clickCell(i,j)));

            layout->addWidget(button,i,j);

            buttons[i][j] = button;
        }

    }

    setCentralWidget(frame);
}

void MainWindow::clickCell(int row,int col) {
    buttons[row][col]->setStyleSheet("background-color: grey; color: red");
}

当我运行我的代码时,我得到了大约 100 次以下输出

QObject::connect: No such slot MainWindow::clickCell(i,j) in ..\untitled\mainwindow.cpp:41
QObject::connect:  (receiver name: 'MainWindow')

解决方法

根据评论:使用新的信号/槽语法来调用 lambda 作为槽。因此,您的 connect 调用应该类似于(未经测试)...

connect(button,&QPushButton::released,this,[=,this]
        {
            clickCell(i,j);
        });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。