zoukankan      html  css  js  c++  java
  • Qt C++自定义Qt组件

    • 如果我们要自定义组件,最好还是在主函数以外的地方执行,这种思想是:一切自定义的控件,其属性,行为等都应该在窗口初始化的时候完成
    #include "mainwindow.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        MainWindow w;//构造函数----执行窗口初始化
        w.show();
    
        return a.exec();
    }

    信号:

    遭遇中断,执行程序决定是否停下来,处理信号

    槽函数:

    一句话-------信号与槽是Qt控件之间通信的接口

    信号接收到之后,用于处理信号的函数

    Qt的核心思想是信号与槽,那么基本操作方法是调用connect(a,b,c,d)函数通过相关控件,发送信号,并指定信号的接受者,给接收者委派处理信号的函数

    具体操作步骤

    1. 定义发送信号的控件(connect函数参数列表的第一个参数,数据类型为指针)
    2. 控件执行什么动作时发送信号(Qt官方为控件定义的信号,其检索方式见番外篇)
    3. 定义信号的接收者(通常也是指针)
    4. 处理信号时调用的函数(槽函数简称槽)
    connect(qb,&QPushButton::pressed,this,&mywidget::close);

    丁大锅定义的控件

    • 创建项目--仅列出关键步骤

     

     class name可以随便取,我决定改成mywidget

    • 项目文件构成

    •  定义窗体的控件为窗体类的私有属性,---否则运行窗体时会出现控件不出现的情况 这需要在窗体类的头文件中完成定义
    #ifndef MYWIDGET_H
    #define MYWIDGET_H
    
    #include <QWidget>
    #include<QPushButton>
    class mywidget : public QWidget
    {
        Q_OBJECT
    
    public:
        mywidget(QWidget *parent = 0);
        ~mywidget();
    private:
        QPushButton *qb;//这就是稍后发送信号的主角,这里声明为指针
    };
    
    #endif // MYWIDGET_H
    • 按照文章开头提出的规划,自定义的控件都要在初始化的时候完成,那么在窗体类的实现文件mywidget.cpp中
    #include "mywidget.h"
    #include <QPushButton>
    mywidget::mywidget(QWidget *parent)
        : QWidget(parent)
    {
        this->setGeometry(QRect(100,200,600,400));
        this->setWindowTitle(QString("昌仔和我"));
        qb=new QPushButton(this);
    
        qb->setText("喜欢昌仔");
        qb->move(20,20);
        qb->show();
        connect(qb,&QPushButton::pressed,this,&mywidget::close);
    }
    
    mywidget::~mywidget()
    {
    
    }

    输出结果

     效果:一点击 按钮 窗体就会关闭

    • 番外篇----connect()函数里的信号怎么选择
    以QPushButton为例,我们希望在点击按钮后,由窗体接受信号,窗体处理这个信号时调用了槽函数close,那么我们如何找到Qt官方为点击按钮所写的信号呢

    我们把光标放在控件所树的类名处点击F1

     你的IDE会出现,(如果再次按下F1,右边的官方文档会挤占编辑器的界面空间)

     我们要检索signal(),显然,QPushButoon中我们并没有找到signal()的用法及其说明

    这并不意味着该控件没有signal信号的用法,而是可能在QPushButton的父类中

     inherits,表示继承自哪个控件,点击链接

    接下来,你按图索骥就是了,点击signal,检索出多个signal,点击查看,按需索取即可。

     

    connect(qb,&QPushButton::pressed,this,&mywidget::close);
    父类中存在的方法,子类中一定存在
  • 相关阅读:
    理解“统一编址与独立编址、I/O端口与I/O内存” arm
    JS + CSS 美化 select 下拉框表单
    关于 ecshop common.js 文件 自动随机输出 Powered by ECShop
    Zend Framework 入门随笔 配置与注意事项
    Delphi编程保存数据到Excel文件(4):使用NativeExcel2控件
    ORACLE 最大连接数的问题1
    一生delphi编程经验(转)
    XLSReadWriteII控件来完成10×10的乘法表
    Delphi 动态调整打印机纸张大小
    Linux下Oracle重启和修改连接数3
  • 原文地址:https://www.cnblogs.com/saintdingspage/p/12252169.html
Copyright © 2011-2022 走看看