Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
Qt 解决信号和插槽参数限制问题_Qt_Qt4 - Fatal编程技术网

Qt 解决信号和插槽参数限制问题

Qt 解决信号和插槽参数限制问题,qt,qt4,Qt,Qt4,我想做一个按钮,当它被点击时,它的文本变成“点击”。我试过了 connect(button1, SIGNAL(clicked()), this, SLOT(markClicked(button1))); 其中此参考主窗口和 void MainWindow::markClicked(QPushButton *button) { button->setText("Clicked"); } 它似乎不起作用,因为我认为插槽不能接受比信号更多的参数。是否有任何方法可以绕过此限制 谢谢。Qt信号

我想做一个按钮,当它被点击时,它的文本变成“点击”。我试过了

connect(button1, SIGNAL(clicked()), this, SLOT(markClicked(button1))); 
其中
参考
主窗口

void MainWindow::markClicked(QPushButton *button) { button->setText("Clicked"); }
它似乎不起作用,因为我认为插槽不能接受比信号更多的参数。是否有任何方法可以绕过此限制


谢谢。

Qt信号/插槽机制只能使用类似参数将信号传输到插槽功能。作为解决方法,您应该使用:

函数是

void主窗口::markClicked(QWidget*widget){
QPushButton*button=qobject_cast(小部件);
按钮->设置文本(“单击”);
}

Qt信号/插槽机构只能将信号传输到具有类似参数的插槽功能。作为解决方法,您应该使用:

函数是

void主窗口::markClicked(QWidget*widget){
QPushButton*button=qobject_cast(小部件);
按钮->设置文本(“单击”);
}

另一种方法是为参数使用默认值,然后使用sender()方法:

在主窗口中:
void markClicked(QPushButton*button=NULL)

然后:
connect(按钮1,信号(单击()),此,插槽(标记单击())

以及:

void主窗口::单击标记(QPushButton*按钮){
如果(button==NULL){button=qobject_cast(sender());}
按钮->设置文本(“单击”);
}

另一种方法是为参数使用默认值,然后使用sender()方法:

在主窗口中:
void markClicked(QPushButton*button=NULL)

然后:
connect(按钮1,信号(单击()),此,插槽(标记单击())

以及:

void主窗口::单击标记(QPushButton*按钮){
如果(button==NULL){button=qobject_cast(sender());}
按钮->设置文本(“单击”);
}
QSignalMapper mapper;
...
connect(button1, SIGNAL(clicked()), &mapper, SLOT(map()));
mapper.setMapping(button1, button1); // not sure whether this is mandatory or not
...
connect(&mapper, SIGNAL(mapped(QWidget*)), this, SLOT(markClicked(QWidget*)));
void MainWindow::markClicked(QWidget *widget) {
  QPushButton *button = qobject_cast<QPushButton*>(widget);
  button->setText("Clicked");
}
void MainWindow::markClicked(QPushButton *button) {
   if (button==NULL) { button = qobject_cast<QPushButton*>(sender()); }
    button->setText("Clicked");
}