我想为信号分配三个按钮的插槽。
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QSignalMapper *signalmapper;
Ui::MainWindow *ui;
void test(int);
signals:
void clickmee(int);
public slots:
void setclick1(int);
void setclick2(int);
void setclick3(int);
};
我在构造函数中执行此操作:
signalmapper = new QSignalMapper(this);
signalmapper->setMapping(ui->pushButton, 10);
signalmapper->setMapping(ui->pushButton1, 10);
signalmapper->setMapping(ui->pushButton1, 10);
connect(signalmapper, SIGNAL(mapped(int)),this,SLOT(clickmee(int)));
但是当我运行程序时写道:
QObject :: connect:.. \ Qsignal2 \ mainwindow.cpp中没有这样的插槽MainWindow :: clickmee(int):11 QObject :: connect :(接收者名称:'MainWindow')
如何分配信号槽?如何将参数发送到插槽?
编辑: 我想这样做:
void setclick1(int x)
{
if(x== 10)
{
// ....
}
else
{
// ...
}
}
但此功能未触发。我怎么能这样做?
答案 0 :(得分:0)
你应该试试
connect(signalmapper, SIGNAL(mapped(int)),this, SIGNAL(clickmee(int)));
我不确定在Qt4或Qt5中是否仍然允许这样做,但它在Qt3中有效。它只是将信号signalmapper.mapped(x)重新发送到this.clickmee(x)
如果这不起作用,你应该写一个真正的插槽,将它连接到signalamapper.mapped并在那里发出clickmee。像这样:
public slots:
void clickmee_slot(int x) {
emit clickmee(x);
}
并在构造函数中:
connect(signalmapper, SIGNAL(mapped(int)),this, SLOT(clickmee_slot(int)));