[Interest] invalidated copies of QString in QCommonStyle::cachedOption

Igor Mironchik igor.mironchik at gmail.com
Mon Jan 18 10:21:45 CET 2016


Hi,

I'm not sure that this will help, but...

Can you reset model on closing of your table view, drop any data, etc... 
And then close view.

If I understood your correctly you are loading model again on new show?

On 18.01.2016 11:40, Mojmír Svoboda wrote:
> Hello,
>
> i have a crash in QCommonStyle::subElementRect
>
>     case SE_ItemViewItemDecoration:
>     case SE_ItemViewItemText:
>     case SE_ItemViewItemFocusRect:
>         if (const QStyleOptionViewItem *vopt = ...) {
>             if (!d->isViewItemCached(*vopt)) {
>                 d->viewItemLayout(...);
>                 if (d->cachedOption) {
> >>>>                delete d->cachedOption;
>                     d->cachedOption = 0;
>                 }
>                 d->cachedOption = new QStyleOptionViewItem(*vopt);
>             }
>
> with callstack:
>   QArrayData::deallocate
>   QTypedArrayData<unsigned short>::deallocate(QArrayData * data)
>   QString::~QString() Line 1070
>   QStyleOptionViewItem::~QStyleOptionViewItem()
>   QStyleOptionViewItem::`scalar deleting destructor'(unsigned int)
> > QCommonStyle::subElementRect(QStyle::SubElement sr, const 
> QStyleOption * opt, const QWidget * widget) Line 2993
>   QWindowsStyle::subElementRect
>   QWindowsVistaStyle::subElementRect
>   QCommonStyle::drawControl
>   QWindowsStyle::drawControl
>   QWindowsVistaStyle::drawControl
>   QStyledItemDelegate::paint
>   QTableViewPrivate::drawCell
>   QTableView::paintEvent
>   ...
>
>
> How this occurs:
> i have QTableView with custom model that uses memmapped file filled 
> with lots of QStringData. These QStringData are set using the 
> technique presented in http://woboq.com/blog/qstringliteral.html for 
> example.
>
> The problem is when the storage goes away (widget is closed), because 
> there may be copies of those strings, and indeed they are.
>
> One of the copies is in QCommonStylePrivate::cachedOption::text field. I
> suspect these style classes use some form of sharing, so when i close 
> the widget, the copy of qstring will survive the storage, and then 
> when new qtableview opens, it tries to reuse the style and on the 
> first use it destroys the old content of .text field and crash follows.
>
> Now what do i do? Try to force somehow the style class to drop the 
> d->cachedOption?
> Any ideas, please?
>
> Best regards,
> Mojmir
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest




More information about the Interest mailing list