C++ QT信号和插槽不工作,发出错误消息
我对Qt是新手,正在尝试编写信号和插槽。下面是我试图运行的代码。通过“连接”功能上的插槽和信号关键字,它工作正常。但我不想在connect函数上使用SIGNAL和SLOT关键字,而是想使用不同的方法C++ QT信号和插槽不工作,发出错误消息,c++,qt,qt-signals,qt-slot,C++,Qt,Qt Signals,Qt Slot,我对Qt是新手,正在尝试编写信号和插槽。下面是我试图运行的代码。通过“连接”功能上的插槽和信号关键字,它工作正常。但我不想在connect函数上使用SIGNAL和SLOT关键字,而是想使用不同的方法 class MyWindow:public QMainWindow { Q_OBJECT public: MyWindow(); }; MyWindow::MyWindow() { QWidget *widget=new QWidget;
class MyWindow:public QMainWindow
{
Q_OBJECT
public:
MyWindow();
};
MyWindow::MyWindow()
{
QWidget *widget=new QWidget;
QHBoxLayout *layout =new QHBoxLayout;
QSpinBox *mySlide = new QSpinBox;
mySlide->setRange(0,10);
QLCDNumber *lcdNumber= new QLCDNumber;
layout->addWidget(mySlide);
layout->addWidget(lcdNumber);
connect(mySlide,SIGNAL(valueChanged(int)),lcdNumber,SLOT(display(int)));
// connect(mySlide, &QSpinBox::valueChanged,lcdNumber, &QLCDNumber::display);
widget->setLayout(layout);
setCentralWidget(widget);
}
在上面的代码中,未注释的connect函数工作正常,但注释的connect函数不工作。我收到错误“没有匹配的函数来调用MyWindow::connect”。不知道我在这里犯了什么错误。我一直在关注qt上的这篇文章
问题在于信号---和插槽---对于不同的参数类型都有多个重载。你有几个选择 1) 使用
static\u cast
消除各种信号和插槽过载之间的歧义
connect(mySlide,
static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
lcdNumber,
static_cast<void(QLCDNumber::*)(int)>(&QLCDNumber::display));
尽管使用
lambda仍然
需要对信号进行static\u cast
。非常感谢。它确实奏效了。但我只是想知道为什么connect(mySlide、SIGNAL(valueChanged(int))、lcdNumber和QLCDNumber::display)不起作用。第一部分是明确的信号。您不能混合和匹配各种信号/插槽语法。它要么是全部信号和插槽语法,要么是指向成员的新指针语法。
connect(mySlide, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),
[lcdNumber](int value)
{
lcdNumber->display(value);
});