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;
相关推荐
LCG元5 分钟前
STM32实战:基于STM32F103的车内防窒息系统(红外检测+GSM报警)
stm32·单片机·嵌入式硬件
高林雨露6 分钟前
kotlin 相关code
开发语言·kotlin
我还记得那天9 分钟前
函数的递归调用
c语言·开发语言·visualstudio
zhangfeng113310 分钟前
ThinkPHP5 事件系统的标准最佳实践 事件系统的完整设计逻辑tags.php tags.php(事件地图)
android·开发语言·php
XTIOT66611 分钟前
俄罗斯诚信标签Chestny ZNAK技术约束分析与智能化应对思路
大数据·人工智能·嵌入式硬件·物联网
xyq202413 分钟前
HTML 标签简写及全称
开发语言
tongluowan00714 分钟前
数据结构 Bitmap(位图)示例 - 用户签到系统
开发语言·数据结构·bitmap·用户签到系统
就叫_这个吧14 分钟前
Java线程池应用的四种方式+线程池底层实现原理
java·开发语言
Rust研习社17 分钟前
Rust 官方拟定 LLM 政策,防止 LLM 污染开源社区?
开发语言·后端·ai·rust·开源
muqsen18 分钟前
Java 分布式相关面试题总结
java·开发语言·分布式