Question

I know the very basic of Qt. The only thing I need is a button and a table. When the user presses the button, I fill the table in with data which comes from database. I have already figured out the database part, mostly.


Now my main problem is Qt signals and slots. In Java, we do it by events and handlers. How can I connect my button to an update of the table. Or if it is better, I could update the table when programs run.

Any sample code or reference where I can find the right direction would be appreciated!

Was it helpful?

Solution

This is very ismple. You would use Qt signal slot mechanism for this. You need to connect the button's clicked signal to your update handler slot for the database.

#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;
};

With C++11 support, this would be even simpler as you could use lambda.

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

Disclaimer: this is just proto type code, so this was not even compilation-tested, but it should get you going, I think.

Here is a good example how to create signals and slots using QtCreator:

Creating a Qt Widget Based Application

enter image description here

Here you can find the all Qt 4.8 documentation for that if you still happen to use that:

Qt Designer's Signals and Slots Editing Mode

enter image description here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top