Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt插槽和信号:输入QPushButton作为参数?_C++_Qt - Fatal编程技术网

C++ Qt插槽和信号:输入QPushButton作为参数?

C++ Qt插槽和信号:输入QPushButton作为参数?,c++,qt,C++,Qt,我目前拥有以下功能: void MainWindow::onJeopardySquareClicked(){ QPushButton *temp; for(int i =0; i < 6;i++){ for (int j = 0; j < 6; ++j) { if(button[i][j] == sender()){ temp = button[i][j]; bre

我目前拥有以下功能:

void MainWindow::onJeopardySquareClicked(){
    QPushButton *temp;
    for(int i =0; i < 6;i++){
        for (int j = 0; j < 6; ++j) {
            if(button[i][j] == sender()){
                temp = button[i][j];
                break;
        }

        }
    }
    temp->setStyleSheet("background-color: gray;");
}
有没有什么方法可以发送实际的按钮,这样我就不需要遍历数组中的每个按钮?我不想子类QPushButton,如果我不必这样做的话,这似乎太过分了。我还想避免使用静态变量

这正是我想要的:

  void MainWindow::onJeopardySquareClicked(QPushButton clickedButton){
        clickedButton.setStyleSheet("background-color: gray;");
    }

在OnJeopardySquarecicked中,您可以使用来找出信号来自哪个QObject。否则,您也可以使用来映射对象/小部件。

sender()是丑陋的非面向对象的。使用QSignalMapper。

有没有一种方法可以直接从sender()获取对象,而无需循环?编辑:我想map就是我想要的。您必须将sender()强制转换为QPushButton,从而获得已单击的按钮。但是你也可以使用QSignalMapper,同意这个。函数的文档中也提到了这一点。
  void MainWindow::onJeopardySquareClicked(QPushButton clickedButton){
        clickedButton.setStyleSheet("background-color: gray;");
    }