zoukankan      html  css  js  c++  java
  • Qt一个工程调用另一个工程的类成员变量

    一句两句话已经不能表达现在的激动情绪了,唯有感叹知识的博大精深,并把感叹转变为文字。

    同一个工程调用其他类成员变量非常简单。

    如:

    定义

    Test1.h中申明成员变量

    class A
    {
    public:
    	double m_fTest;
    };
    

    Test1.cpp中改变成员变量的值。

    m_fTest = 265.78;

    然后再类B中调用类A的成员变量m_fTest,并需求类A中改变该值时,类B中也要随之改变:

    调用方法:包涵类A的头文件

    #include “test1.h”

    然后在调用处声明类A的对象:

    A  *a;

    通过类A的对象来调用成员变量即可:

    a->m_fTest;

    不同工程中调用:

    这就不能再像上面那样调用了,虽然也能调用到,但值不会随之改变,只能调用到初始化值。

    这就需要通过虚函数进行调用:

    在工程1中:

    Test1.h中:

    class A
    {
    public:
    virtual void update();
    virtual void onSimulationSlider(int n){};
    };
    

    并在虚函数中调用工程2中的虚函数updateSimulation

    Test2.h中:重写虚函数onSimulationSlider并在该虚函数中调用工程2中的虚函数updateSimulation

    #include “Test1.h”
    class B
    {
    public:
    	double m_fTest;
    void onSimulationSlider(int n){};
    };
    

    在工程2中:Test3中调用类A中的虚函数:

    #include “Test1.h”

    A *mTest;

    mTest ->onSimulationSlider(n);

    然后在工程1中的虚函数onSimulationSlider中操纵想要调用的成员变量。

    如果在工程2中的Test4中的类想通过Test3中的类调用该成员变量,可以通过消息。

    例如:Test4是一个界面类,界面上有一个slider控件,点击slider后,想让工程1中Test1中的成员变量m_fTest的值随slider的值变化而变化。

    则Test3中的虚函数updateSimulation中需要调用在Test4中的虚函数update(重写Test1中的虚函数update)

    Test4.h中:

    声明信号和槽函数:

    signals:

             voidhorizontalSlider( int );

    public slots:

                       voidonhorizontalSlider(int);

    在Test4.cpp中:

    重写Test1中的虚函数updata,并将slider的信号放在虚函数中
    bool SimulationHardwareGUI::update()
    {
    	QObject::connect(ui.m_Slider,SIGNAL(valueChanged(int)),this,SLOT(onhorizontalSlider(int)));
    	this->repaint();
    	return true;
    }
    

    定义槽函数onhorizontalSlider,并在槽函数中调用信号函数

    void SimulationHardwareGUI::onhorizontalSlider(int n)
    {
    	QSlider *ChangeSlider = qobject_cast<QSlider *>(sender());
    	if(ChangeSlider != NULL)
    	{
    		horizontalSlider( n );
    	}
    }
    

    在Test3中调用Test4的信号函数:

    connect((QObject*)(m_SimulationHardware), SIGNAL(horizontalSlider(int )), this, SLOT(onSimulationSlider(int)));

    并定义槽函数onSimulationSlider,在槽函数中调用Test1中的虚函数onSimulationSlider。

    如此循环调用即能实现不同工程的成员变量互调。

    值得注意的是在槽函数和信号函数的参数只能是类型,不能定义变量。


  • 相关阅读:
    js addEventListener事件多次绑定问题
    whistle手机调试工具使用简单教程
    css利用padding-top设置等比例遇到的问题
    webpack多页面配置
    js延时定时器
    webpack打包配置禁止html标签全部转为小写
    css媒体查询aspect-ratio宽高比在less中的使用
    比较好用的移动端适配的两种方案及flexible和px2rem-loader在webpack下的配置
    image-webpack-loader包安装报错解决
    js动态设置padding-top遇到的坑
  • 原文地址:https://www.cnblogs.com/SunkingYang/p/11049214.html
Copyright © 2011-2022 走看看