【问题标题】:Qt Signal/Slot IssueQt 信号/插槽问题
【发布时间】:2020-10-01 17:42:58
【问题描述】:

我不知道这里出了什么问题。 我想将一个值从一个类传递给另一个。 代码如下:

ma​​inwindow.h

public slots:
    void printNumbers(int);

ma​​inwindow.cpp

void MainWindow::printNumbers(int a)
{
    qDebug() << a;
}

myudp.h

signals:
    inline void sendBuff(int);

myudp.cpp

        [***]
        MainWindow *widget = new MainWindow();
        connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
        const bool connected = connect(this , SIGNAL(sendBuff(int)), widget ,SLOT(printNumbers(int)));
        qDebug() << "Connection established?" << connected;
        [***]

    void MyUDP::readyRead()
    {
        // when data comes in
        emit sendBuff(13);

        [***]
    }

    inline void MyUDP::sendBuff(int a)
    {
        qDebug() << "sending " << a ;
    }

Main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QMainWindow window;
    MainWindow *widget = new MainWindow();
    window.setCentralWidget(widget);
    window.resize(900, 600);
    window.show();
    MyUDP *client = new MyUDP();
    return a.exec();
}

我使用“内联”是因为一个错误:重复 MyUDP::sendBuff(int a)。

我不知道这是否是个问题。

当我执行“emit sendBuff(12)”时,我只收到“sending 12”,我没有收到 printNumbers() strong> 的输出,即使变量“connected”为真。

【问题讨论】:

  • 您检查信号是否发出?您需要调试 MyUDP::readyRead() 并确保您的套接字正在工作并且 readyread() 被触发

标签: c++ qt signals slots


【解决方案1】:

删除插槽的内联声明,如果你的类需要内部使用 sendBuff 然后声明一个新方法...

signals:
    void sendBuffSignal(int);

在cpp中

void MyUDP::sendBuff(int a)
{
    qDebug() << "sending " << a ;
}

【讨论】:

  • 谢谢,伙计。我想删除整个 sendBuff 声明并且它有效。但是如果我只删除内联声明,它会返回一个重复的声明错误。只是想知道,你对这个问题有什么想法吗?
猜你喜欢
  • 2011-10-29
  • 1970-01-01
  • 2017-02-06
  • 2012-09-11
  • 1970-01-01
  • 2012-10-15
  • 2015-07-18
  • 2011-09-06
  • 2013-09-27
相关资源
最近更新 更多