VS2017C++MFC复选框下一次启用记住上一次的选择

在欢乐连连看基本模式点击“设置”后启动了“设置对话框”

void CGameDlg::OnBnClickedButtonSet()
{
	// TODO: 在此添加控件通知处理程序代码
	m_bPause = true;
	m_gameset.DoModal();
    bPause = false;
}

其中m_Pause标志游戏是否暂停,m_bPause = true;就是改为暂停。
m_gameset.DoModal();启动新的对话框。

首先是第一个问题:我默认设置里面的复选框是“选中的”

下面的是CSetDlg.h文件,定义两个bool型变量music和sound,同时赋初值为true。

class CSetDlg : public CDialogEx
{
//这里省略一堆系统自己生成的代码
public:
	virtual BOOL OnInitDialog();
	bool music=true;
	bool sound=true;
	afx_msg void OnClose();
};

那么这有什么意义呢?
在启用该对话框的时候,在OnInitDialog函数中去设定复选框状态。如下所示:

BOOL CSetDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  在此添加额外的初始化
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标
	if(music)
		((CButton*)GetDlgItem(IDC_CHECK_MUSIC))->SetCheck(BST_CHECKED);
	if(sound)
		((CButton*)GetDlgItem(IDC_CHECK_SOUND))->SetCheck(BST_CHECKED);

	return TRUE;  // return TRUE unless you set the focus to a control
				  // 异常: OCX 属性页应返回 FALSE
}

如上所见,第一次打开“设置框”,就可以根据两个bool型变量的情况,将两个框设为选中。

如果我修改了复选框的值呢,第二次打开怎么办?

void CSetDlg::OnClose()
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	music = ((CButton*)GetDlgItem(IDC_CHECK_MUSIC))->GetCheck();
	sound = ((CButton*)GetDlgItem(IDC_CHECK_SOUND))->GetCheck();
	CDialogEx::OnClose();
}

在对话框关闭的时候,获取复选框的状态,并将之保存到bool变量里面,覆盖了之前的默认值true,同时在下次启用设置框的时候调用“OnInitDialog函数”完成再次配置。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现在QGIS二次开发中,当QgsLayerTreeGroup的中时,联动中其所有子节点,可以按照以下步骤进行操作: 1. 获取QgsLayerTreeGroup对象 首先,需要获取到要操作的QgsLayerTreeGroup对象。可以通过QgsProject类的`layerTreeRoot()`方法获取整个图层树的根节点,然后通过遍历找到目标QgsLayerTreeGroup对象。例如: ```cpp QgsLayerTreeGroup* rootGroup = QgsProject::instance()->layerTreeRoot(); QgsLayerTreeGroup* targetGroup = nullptr; // 遍历图层树,找到目标QgsLayerTreeGroup对象 for (QgsLayerTreeNode* node : rootGroup->findLayers()) { if (node->type() == QgsLayerTreeNode::Group && node->name() == "Target Group") { targetGroup = dynamic_cast<QgsLayerTreeGroup*>(node); break; } } if (!targetGroup) { // 目标QgsLayerTreeGroup对象不存在,进行错误处理 return; } ``` 2. 监听框状态变化 使用QObject::connect()方法连接QgsLayerTreeGroup对象的`visibilityChanged()`信号与自定义槽函数,以监听框状态的变化。当框状态变化时,会自动调用槽函数。例如: ```cpp // 连接visibilityChanged信号与自定义槽函数 QObject::connect(targetGroup, &QgsLayerTreeGroup::visibilityChanged, this, &MyClass::onGroupVisibilityChanged); ``` 3. 实现槽函数 在槽函数中,可以遍历目标QgsLayerTreeGroup对象的所有子节点,并设置它们的框状态与目标QgsLayerTreeGroup对象一致。例如: ```cpp void MyClass::onGroupVisibilityChanged() { // 获取目标QgsLayerTreeGroup对象的框状态 bool groupVisible = targetGroup->isVisible(); // 遍历目标QgsLayerTreeGroup对象的所有子节点 for (QgsLayerTreeNode* node : targetGroup->findLayers()) { // 设置子节点的框状态与目标QgsLayerTreeGroup对象一致 node->setItemVisibilityChecked(groupVisible); } } ``` 通过以上步骤,当目标QgsLayerTreeGroup对象的框状态变化时,其所有子节点的框状态将会联动中或取消中。请根据实际情况修改代码中的参数和逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值