自己找到答案了……
其实我当时是想实现一个有默认值的函数指针做参数,它其实应该是这么写:
bool confirm(QString title,
QString content,
bool hasCheckBox = false,
QString checkBoxText = "",
void (*callBack)(void) = NULL)
{
if(hasCheckBox) QCheckBox *chb = new QCheckBox(checkBoxText);
//...
//confirmed是确认按钮按下的状态
if(confirmed) callBack();
//...
}
这个confirm
说白了就是制作一个自定义的QMessageBox::question对话框,如果hasCheckBox
,就在对话框中显示复选框,文字内容为checkBoxText
的值,当点击按钮角色为AcceptRole
的时候,就调用外部写好的一个函数,通过形参callBack
来调用。比如:
//...
void callback(){
QMessageBox::information(NULL, "不再提示", "已选定不再提示!");
}
confirm("请确认","删除后将无法恢复,是否确认?", true, "不再提示", callback);
//...
执行后就是这样的:
→
我是想着这样写,一个函数就可以复用于更多场景,比如:
//...
void neverAsk(){
//..Never Ask codes
}
confirm("即将创建角色",QString("新角色名为%1,是否确认?").arg(user.name), true, "以后都直接确认", neverAsk);
//...
执行后就是这样的:
我上午的时候脑子瓦特了,首先是不应该用void *
来表示参数为函数指针,实际的用函数指针的作为参数的写法应该还是类型 (*函数名)(参数列表)
;另外就是默认值不一定非得是函数体,也可以是空值。
我当时死活就想不到这个点……所以一直纠结这里怎么写一个默认的函数体来作为默认函数执行= =|||
现在明白了,总结如上。
感谢上面两位热心朋友的帮助!
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…