目录
[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自定义控件集成到QtCreator中使用(方式一)。如何在QtCreator中使用自定义控件?注意方式一与方式二的差别。_哔哩哔哩_bilibili
提升后就可以在widget.cpp中直接访问另一个widgetLocker.cpp中的一些槽函数

2. 通过信号与槽
在widlocker.cpp发送emitwidlocker.h中的signalShowAppend信号,2.在widget.cpp中将该信号连接到formdebug.cpp中的槽函数

2.1 例子
要实现所描述的功能,需要创建一个简单的 Qt 应用程序,该程序将包含三个 .cpp
文件和三个对应的 .ui
文件。我们将确保在 1.ui
和 3.ui
中能够访问 2.cpp
中的变量,同时 2.cpp
可以调用 1.cpp
和 3.cpp
中的槽函数。
一问:
MainWindow2::MainWindow2(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow2), someVariable(0) { ui->setupUi(this); },这里的someVariable(0)表示什么意思
一答:
在 C++ 中,
someVariable(0)
是一个成员初始化列表(member initializer list)的用法,它用于在构造函数的初始化阶段直接初始化类成员变量。在这个上下文中,someVariable
是MainWindow2
类的一个成员变量,它的类型可能是整数(int
)或其他类型。在MainWindow2
类中定义,通常用于存储与该窗口相关的某些数据。以下是具体的解释:
成员初始化列表:
- 在构造函数的初始化列表中,
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;