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