私のコードの一部:
signalMapper = new QSignalMapper(this);
for(int i=0; i<result.count(); ++i)
{
drawpushb(result.at(i).ptr,pushb.at(i),ratio,0); // draw pic in pushb.
grid->addWidget(pushb.at(row*opregel+c),row,col);
connect(pushb.at(i), SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(pushb.at(i), i);
if(++col==opregel)
{
++row;
col=0;
}
if((row*opregel + col)==totalbuttons)
break;
}
connect(signalMapper, SIGNAL(mapped(int )),this, SLOT(goto_tab(int )));
作成されたプッシュボタンのリストがあり、それらはグリッドレイアウトに配置されます。それはウィジェットに配置され、qtabwidgetに配置されます。
Ok。これで、そのコードが複数回実行されます。タブウィジェットが空になり、最初にそのタブにあるウィジェットが削除されるため、プッシュボタンも削除されます。しかし、マッパーはどうなりますか?それらのボタンはもう存在しません。その後、新しいプッシュボタン用に新しいマッパーが作成されます。古いものはどうなりますか?それはまだそこにあり、何もしていませんか?シグナルマッパーも削除する必要があります(方法は?)。
私はqtを初めて使用しますが、QTによって何が削除され、何を自分で削除する必要があるのかがわからないことがあります。