Qt中2个.app源文件之间函数与变量的互相调用

目录

1.实例化

[1.1 提升为某个类的自定义控件](#1.1 提升为某个类的自定义控件)

[2. 通过信号与槽](#2. 通过信号与槽)

[2.1 例子](#2.1 例子)

[2.2 示例1](#2.2 示例1)

[2.3 一个在widtop.h中定义的可以在widget.cpp中使用的全局变量](#2.3 一个在widtop.h中定义的可以在widget.cpp中使用的全局变量)


1.实例化

复制代码
// 在widget.cpp中实例化formconnect.cpp中的类
// 调试页面
 m_formConnect = new FormDebug();
复制代码
 connect(m_formConnect, SIGNAL(signalShowAppendNet(int, QString, int, bool)), m_formDebug, SLOT(slotShowAppend(int, QString, int, bool)));
复制代码
signalShowAppendNet是formconnect.h中的信号,slotShowAppend是formconnect.cpp中的函数

ui->widgetLocker 是一个指向某个 UI 控件(可能是 widgetLocker 这个控件对象)的指针,表示当前界面上的一个组件

1.1 提升为某个类的自定义控件

QT中提升为自定义控件的方法_qt 提升为-CSDN博客

Qt自定义控件集成到QtCreator中使用(方式一)。如何在QtCreator中使用自定义控件?注意方式一与方式二的差别。_哔哩哔哩_bilibili

提升后就可以在widget.cpp中直接访问另一个widgetLocker.cpp中的一些槽函数

2. 通过信号与槽

复制代码
    在widlocker.cpp发送emitwidlocker.h中的signalShowAppend信号,2.在widget.cpp中将该信号连接到formdebug.cpp中的槽函数

2.1 例子

要实现所描述的功能,需要创建一个简单的 Qt 应用程序,该程序将包含三个 .cpp 文件和三个对应的 .ui 文件。我们将确保在 1.ui3.ui 中能够访问 2.cpp 中的变量,同时 2.cpp 可以调用 1.cpp3.cpp 中的槽函数。

一问:

MainWindow2::MainWindow2(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow2), someVariable(0) { ui->setupUi(this); },这里的someVariable(0)表示什么意思

一答:

在 C++ 中,someVariable(0) 是一个成员初始化列表(member initializer list)的用法,它用于在构造函数的初始化阶段直接初始化类成员变量。在这个上下文中,someVariableMainWindow2 类的一个成员变量,它的类型可能是整数(int)或其他类型。在 MainWindow2 类中定义,通常用于存储与该窗口相关的某些数据。以下是具体的解释:

  1. 成员初始化列表:

    • 在构造函数的初始化列表中,someVariable(0) 的意思是将 someVariable 初始化为 0。这个初始化是在构造函数的主体执行之前完成的。
    • 使用初始化列表的好处包括:
      • 性能:直接初始化成员变量通常比在构造函数体内赋值更有效。
      • 支持常量和引用类型:中初如果成员变量是常量(const)或引用(&),则必须在初始化列表始化,因为它们不能在构造函数体中赋值。

2.2 示例1

cpp 复制代码
class Example {
public:
    Example(int value); // 构造函数声明
    int someVariable;   // 成员变量

private:
    int anotherVariable;
};

// 构造函数定义
Example::Example(int value) 
    : someVariable(value), // 用传入的 value 初始化 someVariable
      anotherVariable(0)   // 将 anotherVariable 初始化为 0
{
    // 这里可以有其他初始化代码
}

​

2.3 一个在widtop.h中定义的可以在widget.cpp中使用的全局变量

1.widtop.h

cpp 复制代码
#ifndef WIDTOP_H
#define WIDTOP_H

#include <QWidget>
#include "quiwidget.h"
#include "dlgmessage.h"

namespace Ui {
class WidTop;
}

class WidTop : public QWidget
{
    Q_OBJECT

public:
    explicit WidTop(QWidget *parent = 0);
    ~WidTop();

    //  按下次数
    int m_nPressTimes = 0;
    //  按下次数清零
    QTimer* m_timerTimesReset = NULL;

    //  设置在线状态显示
    void OnSetOnlineState(bool bOnline, QString strInfo, QString strStyle);

    //  在线信息
    QString m_strInfo = "";
    bool m_bOnline = false;
    static bool login_Flag; //here

signals:
    void signalAdminLogin();

    //  消息提示框
    void signalPopMsgDlg(DLG_MSG_INFO stDlgMsgInfo);

public slots:
    //  按下次数清零
    void slotTimesReset();

protected:
    void mouseReleaseEvent(QMouseEvent *ev);

private slots:
    void on_btnOlineState_clicked();

private:
    Ui::WidTop *ui;
};

#endif // WIDTOP_H

2.widtop.cpp

cpp 复制代码
#include "widtop.h"
#include "ui_widtop.h"
bool WidTop::login_Flag = true; //here
WidTop::WidTop(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::WidTop)
{

3.widget.cpp

cpp 复制代码
m_widTop = new WidTop();

//  管理员登录页面
void Widget::slotSwitchAdminLogin()
{
    //  切换tab页面
    //  设置登录页面用户名和密码
    ui->widAdminLogin->OnSetUserAndPwd(App::strUser, "");
    ui->tabWidget->setCurrentWidget(ui->widAdminLogin);
    //  设置超时
    ui->widAdminLogin->m_nCounrdown = 60;
    //  页面缩短
    QRect rectDownAll(420, 118, 612, 482);
    ui->tabWidget->setGeometry(rectDownAll);
    m_widTop->login_Flag = false;  //here
}

4.widget.h

cpp 复制代码
#include "widget/widtop.h"   
//  置顶界面    
WidTop * m_widTop = NULL;
相关推荐
fouryears_2341732 分钟前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~1 小时前
C#---StopWatch类
开发语言·c#
lifallen2 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研2 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
快乐的划水a3 小时前
组合模式及优化
c++·设计模式·组合模式
cui__OaO4 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
星星火柴9364 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
fengfuyao9854 小时前
STM32如何定位HardFault错误,一种实用方法
stm32·单片机·嵌入式硬件
鱼鱼说测试4 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
爱学习的颖颖5 小时前
EXTI外部中断的执行逻辑|以对射式红外传感器计次为例
单片机·嵌入式硬件·exti中断