【问题标题】:How to have button as signal and table as slot in Qt?如何在 Qt 中将按钮作为信号,将表格作为插槽?
【发布时间】:2014-05-03 13:19:19
【问题描述】:

我了解 Qt 的基本知识。我唯一需要的是一个按钮和一张桌子。当用户按下按钮时,我用来自数据库的数据填充表格。大部分我已经弄清楚了数据库部分。


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

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

【问题讨论】:

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


    【解决方案1】:

    这很简单。您将为此使用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

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

    Qt Designer's Signals and Slots Editing Mode

    【讨论】:

    • 我看过几个 youtube 视频,但是在 qt4 中,当我右键单击时没有选项说转到插槽,当我单击编辑插槽并单击按钮对我不起作用:(跨度>
    猜你喜欢
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多