提问者:小点点

如何使用connect将qml按钮与同一个类的cpp函数连接起来?


我想使用connect将一个qml按钮与同一个类的cpp函数连接起来,但是它不起作用。

我试了一下:

窗口{height:100;width 200;

Button{
width:100
height: 100
onclicked {TestWindow.setbtStart(btStart.checked)}
}

}

在CPP中:

#包括<; QDebug>; #包括<; iostream>;

TestWindow::TestWindow(QObject *parent) : QObject(parent)
{

    connect(this, SIGNAL(btStartChanged(bool)), this ,SLOT(play(void)) );

}

void TestWindow::play(void)
{
    qDebug() << "Hello world\n";
}

bool TestWindow::btStart() const
{
    return m_btStart;
}

void TestWindow::setbtStart(bool btStart)
{
    if (m_btStart == btStart)
        return;

    m_btStart = btStart;
    emit btStartChanged(m_btStart);
}

但是当我点击按钮时它并没有调用播放功能,我怎么能做到这一点呢?


共1个答案

匿名用户

您必须连接到类的实例,如下所示:

Button{
   width:100
   height: 100
   onclicked {testWindow.setbtStart(btStart.checked)}
}

TestWindow {
   id: testWindow
}

当然,您的类需要注册qml才能使用它。 有关更多信息,请查看以下内容:

https://doc.qt.io/qt-5.14/qtqml-cppintegration-definetypes.html

在QML文件中使用C++类变量

您还必须确保您想要连接的函数可以从QML访问。 为此,您只需将其定义为插槽。