带有自定义插槽功能的Connect函数在Qt上不起作用

带有自定义插槽功能的Connect函数在Qt上不起作用,qt,serial-port,widget,connect,Qt,Serial Port,Widget,Connect,我确信我的问题很简单,但我就是无法调试 我正在尝试将一个spinBox小部件连接到一个自定义函数,该函数在Qt上设置我的QSerialPort实例的com端口 在我的主窗口构造函数中,我尝试将com_spinBox连接到名为setComPort()的自定义函数: QSerialPort*串行; 主窗口::主窗口(QWidget*父窗口) :QMainWindow(父级) ,ui(新ui::Main窗口) { ui->setupUi(this);//默认情况下在此处。将指向mainwindow的指

我确信我的问题很简单,但我就是无法调试

我正在尝试将一个spinBox小部件连接到一个自定义函数,该函数在Qt上设置我的QSerialPort实例的com端口

在我的主窗口构造函数中,我尝试将com_spinBox连接到名为setComPort()的自定义函数:

QSerialPort*串行;
主窗口::主窗口(QWidget*父窗口)
:QMainWindow(父级)
,ui(新ui::Main窗口)
{
ui->setupUi(this);//默认情况下在此处。将指向mainwindow的指针作为参数
serial=new QSerialPort(this);//此(主窗口)是父窗口
连接(ui->com_spinBox,信号(值更改(QString)),
这个插槽(MainWindow::setComPort());
串行->设置包速率(QSerialPort::Baud9600);
串行->设置数据位(QSerialPort::Data8);
串行->设置奇偶校验(QSerialPort::NoParity);
串行->设置停止位(QSerialPort::OneStop);
串行->设置流量控制(QSerialPort::NoFlowControl);

qDebug()您使用函数指针错误地混合了
QObject::connect
的新旧语法。这是错误的:
SLOT(MainWindow::setComPort()

如果您想故意使用旧语法..不要将函数指针与
插槽一起使用
,只需使用该插槽签名即可;您的
连接应如下所示:

connect(ui->spinBox, SIGNAL(valueChanged(const QString&)),
                this, SLOT(setComPort()));
另一方面,可以对函数指针使用新语法。您只需要使用
QSpinBox
的重载信号签名,如下所述:

connect(ui->spinBox,QOverload::of(&QSpinBox::valueChanged),
这是(主窗口::setComPort);

还要注意的是,虽然Qt connect()允许插槽没有参数,但基于猜测您的意图..您可能希望更改插槽签名以接收串行端口号..
MainWindow::setComPort(const QString&)

您使用函数指针以错误的方式混合了
QObject::connect
的新旧语法。这是错误的:
插槽(MainWindow::setComPort()

如果您想故意使用旧语法..不要将函数指针与
插槽一起使用
,只需使用该插槽签名即可;您的
连接应如下所示:

connect(ui->spinBox, SIGNAL(valueChanged(const QString&)),
                this, SLOT(setComPort()));
另一方面,可以对函数指针使用新语法。您只需要使用
QSpinBox
的重载信号签名,如下所述:

connect(ui->spinBox,QOverload::of(&QSpinBox::valueChanged),
这是(主窗口::setComPort);

另外请注意,虽然Qt connect()允许插槽没有参数,但基于猜测您的意图..您可能希望更改插槽签名以接收串行端口号..
MainWindow::setComPort(const QString&)
插槽(MainWindow::setComPort())
这是错误的。请查看并更喜欢使用新的信号/插槽语法。
插槽(MainWindow::setComPort())
这是错误的。请查看并更喜欢使用新的信号/插槽语法。谢谢!我也添加了插槽参数,效果很好。谢谢!我也添加了插槽参数,效果很好。
connect(ui->spinBox, SIGNAL(valueChanged(const QString&)),
                this, SLOT(setComPort()));
connect(ui->spinBox, QOverload<const QString&>::of(&QSpinBox::valueChanged) ,
                this , &MainWindow::setComPort);