以下は、Qtアプリケーションから取得したコードサンプルです。私はC++イテレータを使ってforループとしてforeachループを記述したい。次の "foreach"をC++イテレータとして書く方法
DocumentWindow *MdiWindow::activeDocument()
{
return qobject_cast<DocumentWindow*>(workspace->activeWindow());
}
int i=1;
foreach(QWidget *w, workspace->windowList()) // workspace = new QWorkspace();
{
QString text;
if(i<10)
text = tr("&%1 %2").arg(i++).arg(w->windowTitle());
else
text = w->windowTitle();
QAction *action = windowMenu->addAction(text);
action->setCheckable(true);
action->setChecked(w == activeDocument());
connect(action, SIGNAL(triggered()), mapper, SLOT(map())); // mapper = new QSignalMapper(this);
mapper->setMapping(action, w);
}
以下は私の試みです。これはうまくコンパイルされますが、実行中のアプリケーションでこのコードが呼び出されるとすぐにクラッシュします。そして私はなぜだか分からない。私はそれを正しくしていますか?
DocumentWindow *MdiWindow::activeDocument()
{
return qobject_cast<DocumentWindow*>(workspace->activeWindow());
}
int i = 1;
for(QWidgetList::iterator it = (workspace->windowList()).begin(); it != (workspace->windowList()).end(); ++it)
{
QString text;
if(i < 10)
text = QString("&%1 %2").arg(i++).arg((*it)->windowTitle());
else
text = (*it)->windowTitle();
QAction *action = windowMenu->addAction(text);
action->setCheckable(true);
action->setChecked((*it) == activeDocument());
connect(action, SIGNAL(triggered()), mapper, SLOT(map()));
mapper->setMapping(action, (*it));
}
回答:私は実現しなかったworkspace-> windowList()値、従って両方反復子がコンテナの異なるインスタンスを指していることにより戻ること。