具有自定义插槽功能的连接功能在Qt上不起作用

问题描述 投票:0回答:1

我确定我的问题很简单,但我无法调试!

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

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

QSerialPort *serial;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);  // Here by default. Takes a pointer to mainwindow as argument
    serial = new QSerialPort(this); // this (mainwindow) is parent

    connect(ui->com_spinBox, SIGNAL(valueChanged(QString)),
            this, SLOT(MainWindow::setComPort()));

    serial->setBaudRate(QSerialPort::Baud9600);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);
    qDebug() << "is " << serial->open(QSerialPort::ReadOnly);
    qDebug() << "err " << serial->error();

}

我也在MainWindow.cpp中定义了我的函数(并在.h中声明了它:

void MainWindow::setComPort()
{
    qDebug() << "fu";
}

更改spinBox的值时,我看不到调试控制台上的任何内容。这是Synthax问题吗?我知道qDebug可以正常工作,因为我可以在构造函数中打印其他内容。谢谢!

qt serial-port widget connect
1个回答
0
投票

[您正在使用函数指针。混合QObject::connect的新旧语法,并且使用了错误的方式。这是错误的:SLOT(MainWindow::setComPort()

[如果您想有目的地使用旧语法..请勿将函数指针与SLOT一起使用,只需使用该插槽签名即可;您的connect应该是这样的:

connect(ui->spinBox, SIGNAL(valueChanged(const QString&)),
                this, SLOT(setComPort()));

另一方面,可以使用带有函数指针的新语法..您只需要使用QSpinBox的重载信号签名,如此处https://doc.qt.io/qt-5/qspinbox.html#valueChanged所述:

connect(ui->spinBox, QOverload<const QString&>::of(&QSpinBox::valueChanged) , this , &MainWindow::setComPort);

还请注意,尽管Qt connect()允许插槽不带参数,并且基于您的意图..您可能希望更改插槽签名以接收串行端口号.. MainWindow::setComPort(const QString&)

© www.soinside.com 2019 - 2024. All rights reserved.