【问题标题】:Connect function with custom slot function does not work on Qt带有自定义插槽功能的连接功能在 Qt 上不起作用
【发布时间】:2020-04-04 03:50:30
【问题描述】:

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

我正在尝试将 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 的值时,我在调试控制台上看不到任何内容。是合成器问题吗?我知道 qDebug 可以工作,因为我可以在构造函数中打印其他内容没问题。 谢谢!

【问题讨论】:

  • SLOT(MainWindow::setComPort())这是错误的。请查看documentation 并更喜欢使用新的信号/插槽语法。

标签: qt serial-port widget connect


【解决方案1】:

您正在混合 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&amp;)

【讨论】:

  • 谢谢!我也添加了 slot 参数,效果很好。
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 2017-05-26
  • 1970-01-01
  • 2017-10-11
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多