我想在点击时创建一个PushButton,它的文本会变成'clicked'。我试过了
connect(button1, SIGNAL(clicked()), this, SLOT(markClicked(button1)));
其中this
引用MainWindow
和
void MainWindow::markClicked(QPushButton *button) { button->setText("Clicked"); }
它似乎不起作用,因为我认为SLOT不能比SIGNAL采取更多的参数。如果有任何方法可以解决这个限制吗?
感谢。
答案 0 :(得分:3)
Qt信号/插槽机制只能通过类似参数将信号传输到插槽功能。作为解决方法,您应该使用QSignalMapper:
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*)));
和函数 markClicked 是
void MainWindow::markClicked(QWidget *widget) {
QPushButton *button = qobject_cast<QPushButton*>(widget);
button->setText("Clicked");
}
答案 1 :(得分:1)
另一种方法是使用参数的默认值,然后使用sender()方法:
在MainWindow中:
void markClicked(QPushButton *button = NULL);
然后:
connect(button1, SIGNAL(clicked()), this, SLOT(markClicked()));
和
void MainWindow::markClicked(QPushButton *button) {
if (button==NULL) { button = qobject_cast<QPushButton*>(sender()); }
button->setText("Clicked");
}