【问题标题】:Qt slots and signals: Input QPushButton as a parameter?Qt 插槽和信号:输入 QPushButton 作为参数?
【发布时间】:2014-03-21 20:23:31
【问题描述】:

我目前有这个功能:

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;");
}

它连接到 QPushButtons 网格:

   QObject::connect(button[arrI][j],SIGNAL(pressed()),this, SLOT(onJeopardySquareClicked()));

有什么方法可以发送实际的按钮,这样我就不需要遍历数组中的每个按钮?如果我不需要,我不想继承 QPushButton,这似乎有点矫枉过正。我也想避免使用静态变量。

这正是我想要的:

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

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    在 onJeopardySquareClicked 中,您可以使用QObject::sender() 找出信号源自哪个 QObject。否则,您也可以使用QSignalMapper 来映射对象/小部件。

    【讨论】:

    • 有没有办法可以直接从 sender() 获取对象,而不需要循环?编辑:我认为地图是我想要的。
    • 您必须将 sender() 转换为 QPushButton ,从而获得被点击的按钮。但是你显然也可以使用 QSignalMapper。
    【解决方案2】:

    sender() 丑陋且非 OOP。使用 QSignalMapper。

    【讨论】:

    • 同意这个。函数的文档中也提到了这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2015-07-18
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多