如何在Qt中将按钮作为信号和表作为插槽?

时间:2014-05-03 13:19:19

标签: c++ qt qtcore qobject qt-signals

我知道Qt的基础知识。我唯一需要的是按钮和桌子。当用户按下按钮时,我在表中填入来自数据库的数据。我已经找到了数据库部分,主要是。


现在我的主要问题是Qt信号和插槽。在Java中,我们通过事件和处理程序来完成。如何将我的按钮连接到表的更新。或者如果它更好,我可以在程序运行时更新表。

任何可以找到正确方向的示例代码或参考将不胜感激!

1 个答案:

答案 0 :(得分:2)

这非常简单。您可以使用Qt signal slot mechanism。您需要将the button's clicked signal连接到数据库的更新处理程序槽。

#include <QObject>
#include <QPushButton>

...

class UpdateHandler : public QObject
{
    Q_OBJECT
    public:
    explicit UpdateHandler(QObject *parent) : QObject(parent)
    {
        connect(&m_pushButton, SIGNAL(clicked(bool)), SLOT(updateDatabase()));
    }

    public slots:
    void updateDatabase()
    {
        // update the database here.
    }
    private:
        QPushButton m_pushButton;
};

在C ++ 11的支持下,这可以更简单,因为你可以使用lambda。

    UpdateHandler::UpdateHandler(QObject *parent) : QObject(parent)
    {
        connect(&m_pushButton , &QPushButton::clicked,  [&] {
            // update the database here
        }};
    }

免责声明:这只是原型类型的代码,所以这甚至都没有经过编译测试,但我认为它应该让你走了。

以下是如何使用QtCreator创建信号和插槽的一个很好的示例:

Creating a Qt Widget Based Application

enter image description here

如果你仍然使用它,你可以在这里找到所有的Qt 4.8文档:

Qt Designer's Signals and Slots Editing Mode

enter image description here