Столкнулся с тем что память при удалении QWebView очищается не полностью.
Привожу пример:
Есть class Tabbing наследуемый от QTabWidget
В этом классе есть вектор QVector< WebBrowser* > webBrowser;
WebBrowser наследуется от QWebView
Новая вкладка создается так.
Коментария на русском не отображаются, напишу транслитом.
C++ (Qt)
void Tabbing::createTab( QString url )
{
webBrowser.append( new WebBrowser( this, guessUrlFromString( url ), webBrowser.size() ) ); /*Sozdaem novii webview*/
this->addTab( webBrowser.last(), QString( tr( "Loading..." ) ) ); /*Dobavlaem ego v tabbar*/
connect( webBrowser.last(), SIGNAL( titleChanged( QString ) ),
webBrowser.last(), SLOT( getIndex( QString ) ) );
connect( webBrowser.last(), SIGNAL( changeTitle( QString, int ) ),
this, SLOT( changeTitle( QString, int ) ) );
connect( webBrowser.last(), SIGNAL( loadStarted() ),
webBrowser.last(), SLOT( getIndex() ) );
}
Удаляю вкладку так:
C++ (Qt)
void Tabbing::removeDTab()
{
int currentIndex = this->currentIndex(); /*Zapominaem index tekusei vkladki*/
delete webBrowser.at( currentIndex ); /*Ochisaem pamat iz pod obekta vektora*/
webBrowser.remove( currentIndex ); /*Ydalaem obekt v vektore*/
removeTab( currentIndex ); /*Ydalaem tab*/
for ( int i = currentIndex + 1; i < webBrowser.size(); i++ )
webBrowser.at(i)->counterMinus(); /*Smeshaem kazdii sledyesii element*/
}
Вроде бы все правильно, удалил и очистил все что надо. Но на практике это не так.
Сужу по htop'y при запуске программы с одной вкладкой rambler.ru занимаемая память 0.8%, открываю еще 49-т вкладок с рамблером занимаемой оперативки становится 4.6%, удаляю 49 вкладок, память 3.8%.
Вот с чем связано такая утечка памяти, я что то не так удаляю? Может надо вызвать какой нибудь метод для очистки кеша или еще что? В гугли нашел несколько человек с такими же вопросами, но внятного ответа так и нет, единственное что вычитал что это проблема самого WebKita в Qt. Так ли это?
Пока писал этот пост заметил что пока я не трогал свою программу занимаемая память уменьшалась с 3.8% до 2.5%