• Qt on_pushButton_clicked()的用法【worldsing笔记】


    在Qt里按钮控件默认对应一个on_pushButton_clicked()成员,如果想用点击信号,在代码中实现on_pushButton_clicked()成员即可。

    最近看了一段代码,里面并没有connect函数,只定义了pushbutton,也没有看到调用on_pushButton_clicked()的语句,那么难道说只要点了button,就会自动调用on_pushButton_clicked()的内容吗?

    这种写法是QtCreator默认的,也就是它背后帮你完成了connect。
    比如对象obj有信号A,你只需要在同一个类中完成如下形式的函数即可
    on_obj_a()。
    编译时QtCreator就会自动在背后处理,效果就是对象obj的信号a被连接到这个函数。
    推荐还是不这样做,这样做影响阅读。等多起来时自己也看不明白。也许不应该说是QtCreator的帮助,应该是moc的帮助恰当点。

    Qt Meta Object Compiler会读取*.h文件 生成 moc_*.cpp文件,你说的没有看到调用on_pushButton_clicked()的语句,

    是因为调用此语句的方法刚好就存在于上面的moc_*.cpp文件里,qmake生成的makefile里会指定源代码:


    ***************************************Makefile*******************
    SOURCES = *.cpp
    main.cpp moc_*.cpp
    ******************************************************************


    moc_*cpp文件与*.cpp文件在同一目录下。

    那种格式的不需要专门去connect,
    用的是另外一个函数,在ui_mainwindow.h这个文件中,
    名字叫connectSlotsByName
    详细说明:


    void QMetaObject::connectSlotsByName ( QObject * object ) [static]
    Searches recursively for all child objects of the given object, and connects matching signals from them to slots of object that follow the following form:
    void on_<object name>_<signal name>(<signal parameters>);
    Let's assume our object has a child object of type QPushButton with the object name button1. The slot to catch the button's clicked() signal would be:
    void on_button1_clicked();
    QMetaObject::connectSlotsByName(MainWindow);

    另外需要说明的是如果在此基础上再加入手动的connect的话将会响应两按钮的点击效果,或是直接不应该。

    Qt的增加信号与槽之间的连接方法有:手动编写conncet代码和Ui连接

    Qt的对像之间通信中信号和槽比较常用,其它的通信方法还有postEvent

    所以用法是:

    1、在UI文件里加入按钮,objectName 设置为pushButtonA

    2、在引用的头文件(比如MainWindow.h)里加入按钮曹的声明:

    public slots:
        void on_pushButtonConnect_clicked();

    3、在调用处使用,(比如MainWindow.cpp)。

    void MainWindow::on_pushButtonConnect_clicked()
    {
        qDebug("pushButtonConnect");
    }
    
    
    
  • 相关阅读:
    for循环里面不要进行remove操作,for循环里remove元素后,list的下标会减小,导致遍历不完全
    elasticsearch,java api, transport Client, 查询时索引库可以用通配符*和删除接口不能用
    (一)WebPack4.0 从零开始
    合并代码 dev 到 master
    vscode 终端无法输入问题 看这个就行了
    node 学习笔记:一、 nvm 安装管理Node版本
    常见的对象创建模式
    深入理解闭包
    sort对数组排序
    图片压缩
  • 原文地址:https://www.cnblogs.com/worldsing/p/3358256.html
Copyright © 2020-2023  润新知