刚学Qt+VS2022,Qt创建的MDI窗口项目,如何在主窗口设置当前子窗口的自定义public类型变量的值?

zxphxh 2024-07-28 11:09:30

刚学Qt+VS2022,Qt创建的MDI窗口项目,如何在主窗口设置当前子窗口的自定义public类型变量的值?

思路:在子窗口设置一个Checkbox,点击设置当前子窗口中自定义的一个变量值,为何在子窗口中无反应:

// 主窗口:setDrawLine_triggered() 用来设置子窗口中的m_bDraw_Line

void MyMainWindow::setDrawLine_triggered()

{

qDebug()<<"1: 设置前子--窗口中的:m_bDraw_Line="<<((childWidget*)ui->mdiArea->activeSubWindow())->m_bDraw_Line ;

((childWidget*)ui->mdiArea->activeSubWindow())->m_bDraw_Line = drawLineCheck.isChecked();

// 输出显示也设置成功了,但就是在子窗体中,鼠标移动画线还是默认的是true

qDebug()<<"2: 设置后--子窗口中的:m_bDraw_Line="<<((childWidget*)ui->mdiArea->activeSubWindow())->m_bDraw_Line ;

}

// 子窗口:鼠标移动画线

void childWidget::paintEvent(QPaintEvent *event)

{

qDebug()<<"m_Draw_Line:"<<m_Draw_Line;

// 问题:不管主窗体中CheckBox是否选中,一样画线。m_Draw_Line在构造函数设置为true。

if(m_bDraw_Line) DrawLine(m_Move_pos);

}

// 鼠标移动事件
void childWidget::mouseMoveEvent(QMouseEvent *event)
{
     m_Move_pos = event->pos();
     this->update();
}

// 另外,在主窗体用一个接口函数来设置m_Draw_Line。结果还是无反应。

void childWidget::setDrawLine(bool bdrawline)

{
m_bDraw_Line =  bdrawline;

...全文
1035 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_41871293 2025-01-23
  • 打赏
  • 举报
回复

在使用Qt和VS2022创建MDI(多文档界面)窗口项目时,遇到在主窗口设置当前子窗口的自定义public类型变量的值却无反应的问题是比较常见的。从你提供的代码来看,有几个关键点需要注意。

首先,在主窗口中获取当前活动子窗口并设置其变量值的代码逻辑看起来基本正确,但可能存在类型转换不安全的问题。虽然你使用了(childWidget*)进行强制类型转换,但更推荐使用qobject_cast来进行安全的类型转换,例如:childWidget *activeChild = qobject_cast<childWidget*>(ui->mdiArea->activeSubWindow()->widget());。如果转换失败,activeChild将为nullptr,这样可以避免一些潜在的错误。

配图


其次,在子窗口中变量没有生效可能是因为变量的更新没有触发相关的重绘或者逻辑更新。即使变量的值被设置成功,但如果相关的绘制逻辑没有正确响应这个变化,就会出现看起来没有反应的情况。比如在paintEvent中,确保m_Draw_Line的值确实被正确读取和使用。

对于解决这个问题,一种更好的方式是通过信号和槽机制来实现主窗口和子窗口之间的通信。在Qt中,信号和槽是一种非常强大且灵活的机制。主窗口可以发出一个信号,例如setDrawLineSignal(bool value),子窗口可以定义一个对应的槽函数setDrawLineSlot(bool value),然后在子窗口的构造函数中使用connect函数将主窗口的信号和子窗口的槽连接起来。这样可以确保在主窗口设置变量值时,子窗口能够正确接收到并处理这个变化。

配图


书籍推荐:

  • 《C++ GUI Programming with Qt 4》(第二版)
    • 作者:Jasmin Blanchette、Mark Summerfield
    • 内容特点:这本书详细介绍了Qt 4的相关知识,包括Qt的基础概念、核心类库以及如何进行GUI编程。书中涵盖了大量的示例代码,有助于读者理解如何在实际项目中使用Qt创建各种界面组件,包括MDI应用程序。对于Qt的信号和槽机制也有深入的讲解,并且提供了很多实用的技巧和最佳实践。

      配图

    • 优点:内容全面,示例丰富,非常适合初学者入门Qt编程。对Qt的核心概念讲解透彻,无论是基础的窗口部件还是高级的图形处理都有涉及。缺点:由于是针对Qt 4版本,部分内容可能与Qt 6存在一些差异,需要读者注意区分。
  • 《Mastering Qt 5》
    • 作者:Guillaume Lazar、Robin Penea
    • 内容特点:专注于Qt 5,详细讲解了Qt 5的新特性和改进之处。在MDI相关的章节中,会深入介绍如何利用Qt 5的新功能来构建高效的多文档界面应用程序。书中还涉及到如何优化Qt应用程序的性能,以及如何处理复杂的用户交互逻辑。
    • 优点:针对Qt 5的新特性进行了全面的讲解,能够让读者快速掌握Qt 5相较于之前版本的升级点。对于想要深入了解Qt 5并且构建复杂应用程序的读者非常有帮助。缺点:如果读者需要从Qt 4过渡过来,可能需要补充一些基础知识。
  • 《Qt for Python Developers》
    • 作者:Antonio Diaz - Cano
    • 内容特点:从Python开发者的角度出发,介绍如何使用Qt for Python进行开发。虽然语言是Python,但Qt的核心概念和机制是相通的。书中有很多关于如何利用Python的简洁语法与Qt的强大功能相结合的示例,对于想要使用Python结合Qt进行开发的读者来说是一本很好的入门书籍。
    • 优点:适合Python开发者快速上手Qt开发,提供了一种不同的开发视角。书中示例简洁明了,容易理解。缺点:如果读者主要关注C++ 开发,可能需要额外学习一些Python相关知识。
推荐书籍图书特点
《C++ GUI Programming with Qt 4》(第二版)作者:Jasmin Blanchette、Mark Summerfield,出版社:Prentice Hall,适合初学者入门Qt编程,内容全面涵盖Qt基础概念、核心类库与GUI编程,示例丰富
《Mastering Qt 5》作者:Guillaume Lazar、Robin Penea,出版社:Packt Publishing,针对Qt 5新特性全面讲解,深入MDI构建与性能优化等,适合深入学习Qt 5的读者
《Qt for Python Developers》作者:Antonio Diaz - Cano,出版社:Packt Publishing,从Python开发者角度出发介绍Qt for Python开发,示例简洁,适合Python开发者入门Qt开发

已隐藏部分内容,更多查看原文

zxphxh 2024-07-28
  • 打赏
  • 举报
回复

搞定:
((childWidget*)ui->mdiArea->activeSubWindow()->widget())->m_bDraw_Line = drawLineCheck.isChecked();

zxphxh 2024-07-28
  • 打赏
  • 举报
回复

思路:在子窗口设置一个Checkbox.......。
应为:思路:在主窗口设置一个Checkbox

内容概要:本文围绕基于萤火虫算法(FA)的太阳能、风能与水力混合抽水蓄能系统的优化建模与仿真展开研究,提出了一种融合多源可再生能源与抽水蓄能技术的综合能源系统协调运行策略。通过Matlab平台实现了系统建模、智能优化算法设计与仿真验证全过程,重点解决了风光水多能源出力波动性强、系统供电可靠性低等问题。采用萤火虫算法对储能调度、能量管理与运行经济性进行优化,有效提升了系统对可再生能源的消纳能力和平滑输出性能,同时兼顾运行成本与稳定性。研究涵盖了从数学建模、目标函数构建、约束条件处理到多能互补协调机制的设计,提供了完整的代码实现方案,具有较强的科研复现价与工程应用前景。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源系统优化设计的工程技术人员。; 使用场景及目标:①用于高校或科研机构开展可再生能源集成与储能优化调度相关课题研究;②支撑高水平论文撰写与智能优化算法(如萤火虫算法)在综合能源系统中的应用复现;③为实际电力系统中多能互补项目、微电网能量管理系统的设计与仿真提供方法论与工具支持。; 阅读建议:建议读者结合文中提供的Matlab代码与可能的Simulink模型,逐步调试运行,深入理解算法实现细节与系统建模逻辑;同时关注优化目标函数的设定、约束条件处理及多能源协调机制,以提升自身在能源系统优化领域的建模与创新能力。
源码下载地址: https://pan.quark.cn/s/7f242081e14c 标题 "普中51-A2开发板资料.7z" 提供的信息表明,这是一个与普中51-A2开发板相关的资源包。 51单片机是微控制器领域中的一个经典系列,STC-89C52是51系列中的一个型号,常用于教学和入门级项目。 这个压缩包可能包含了一系列帮助用户理解和使用该开发板的材料。 描述中的"SHA256: B889D6FE71BF1CB25C67D57BE0854787F4D6902B20E2A1AF8FC9DEB66F4C7827"是文件的哈希,用于验证文件的完整性和未被篡改,但具体知识点不在此范围内。 从标签来看,我们可以期待以下内容:1. **普中51-A2开发板**:这是一款基于51单片机的开发工具,可能包括硬件电路图、原理图、PCB设计文件等。 2. **STC-89C52**:这是51单片机的一个变种,具有增强的特性,如更多的I/O口、更大的内存等。 资料可能包含其数据手册、引脚定义、编程指南等。 3. **开发板**:可能包含开发板的使用手册、接线教程、初始化设置步骤等。 4. **51单片机**:基础理论、指令集、编程语言(如汇编或C语言)、中断系统、定时器/计数器的使用等。 5. **开发工具**:可能有Keil、Proteus、ISP编程软件等,这些工具用于编写、调试和烧录代码到单片机中。 从压缩包文件的文件名称列表来看,我们可以深入学习以下内容:1. **普中51单片机开发攻略--A2.pdf**:这可能是开发板的用户指南或教程,涵盖基本操作、示例项目和常见问题解答。 2. **5--开发工具.rar**:可能包含开发环境的安装教程、配置指南和使用技巧。 3. **5--实验程序....
内容概要:本文详细介绍了一种基于Simulink的光伏储能单相逆变器并网仿真模型,系统涵盖了光伏阵列、储能单元、DC-AC单相逆变器及并网接口的完整结构,重点实现了储能环节的能量管理与逆变器并网控制策略的建模仿真。通过Simulink平台构建系统模型,验证了逆变器输出电能质量、并网稳定性以及控制系统的动态响应性能,采用SPWM调制、PI闭环控制等关键技术,确保并网电流与电网电压同频同相,满足并网电能质量要求。该模型不仅可用于分布式能源系统的仿真研究,还可作为新能源并网技术的教学与工程实践工具。; 适合人群:电气工程、自动化、新能源科学与工程等相关专业的高校本科生、研究生、科研人员,以及从事光伏发电系统设计、储能控制与并网技术研发的工程技术人员。; 使用场景及目标:①深入理解光伏储能系统中能量转换、存储与并网控制的整体工作原理;②支持课程设计、毕业设计或科研项目中对单相逆变器控制策略(如SPWM、PI调节、锁相技术等)的仿真验证与参数优化;③为后续研究更复杂的控制算法(如MPPT、低电压穿越、谐波抑制等)提供可扩展的仿真基础平台。; 阅读建议:建议结合MATLAB/Simulink环境动手搭建与调试模型,逐步理解各模块(如光伏建模、储能充放电控制、逆变器驱动、锁相环、PI调节器等)的功能与交互关系,重点关注控制系统的设计逻辑与参数整定过程,并可通过修改负载条件或电网参数测试系统鲁棒性,为进一步拓展至三相系统或多机并网场景奠定基础。

21,494

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧