代码情况:
1. 界面上有一个listview控件。相关代码如下:
SMS::SMS(QWidget *parent) : QDialog(parent)
{
...(其他代码)
TimeDelegate *timedelegate = new TimeDelegate(this);
QObject::connect(timedelegate, SIGNAL(EditEnd()), this, SLOT(TimeEditFinished()));
...(其他代码)
}
void SMS::TimeEditFinished()
{
…(其他代码)
QMessageBox::warning(0, tr("Alert"), tr("Time is invalid!"), tr("OK"));
…(其他代码)
}
2. 为了实现listview的item显示的是时间,建立TimeDelegate类,从而实现listview的item为QtimeEdit。TimeDelegate中相关代码如下:
QWidget *TimeDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
{
QTimeEdit *editor = new QTimeEdit(parent);
QTime minTime(0,0);
editor->setMinimumTime(minTime);
editor->setDisplayFormat("hh:mm:ss");
editor->installEventFilter(const_cast<TimeDelegate*>(this));
QObject::connect(editor, SIGNAL(editingFinished()), this, SLOT(emitEditEnd()));
return editor;
}
void TimeDelegate::emitEditEnd()
{
emit EditEnd();
}
遇到问题:
void Manage::TimeEditFinished()中如果没有QmessageBox函数,则工作正常。如果存在QmessageBox函数,则会出现异常。(估计是在要得到某个已经不存在的构件的style()时出的异常,但是不知道为什么,实在找不到根源!)
百思不得其解,往高手解答!
注:
此问题一直没有解决,往管理员能帮忙想想。
此次补充了函数createEditor中上次未上传的代码和调用堆栈的信息(见附件),怀疑问题的出现跟installEventFilter可能相关,但不能确定。(2007.01.19)
[ 此贴被penguinfish在2007-01-19 17:31重新编辑 ]