Merge remote-tracking branch 'origin/5.9' into 5.10

Change-Id: I896b0cf54f317c4336cc3d3db319a0b89e421728
This commit is contained in:
Tor Arne Vestbø 2018-01-16 11:44:20 +01:00
commit e2a546a18b
26 changed files with 13644 additions and 13006 deletions

183
dist/changes-5.9.4 vendored Normal file
View File

@ -0,0 +1,183 @@
Qt 5.9.4 is a bug-fix release. It maintains both forward and backward
compatibility (source and binary) with Qt 5.9.0 through 5.9.3.
For more details, refer to the online documentation included in this
distribution. The documentation is also available online:
http://doc.qt.io/qt-5/index.html
The Qt version 5.9 series is binary compatible with the 5.8.x series.
Applications compiled for 5.8 will continue to run with 5.9.
Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:
https://bugreports.qt.io/
Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.
****************************************************************************
* Qt 5.9.4 Changes *
****************************************************************************
QtCore
------
- [QTBUG-64529] Fixed a compilation issue with qfloat16 if AVX2 support is
enabled in the compiler. Since all processors that support AVX2 also
support F16C, for GCC and Clang it is recommended to either add -mf16c
to your build or to use the corresponding -march= switch.
- QCoreApplication:
* [QTBUG-58919] Fixed a crash if QCoreApplication is recreated on Windows
and the passed argv parameter is different.
- QFileInfo:
* [QTBUG-30148] Fixed isWritable() on Windows to return whether the given
file is writable only under current privilege levels. Previously, the
result would take into account privilege elevation.
- QObject:
* Fixed a crash that could happen if the context QObject pointer passed to
new-style connect() was null.
- QStandardPaths:
* On Windows, it is now possible to resolve configuration paths even
without QCoreApplication created.
- QString:
* QString::unicode(), constData() and `data() const` do not return a
NUL-terminated string. This was true before, but the documentation
claimed the opposite.
- QVector:
* Fixed a problem when calling removeAll() on an element from the
container, if the container had more than one copy of the that element.
- QXmlStreamWriter:
* [QTBUG-63538] Empty namespace URIs are now possible.
- State Machine:
* [QTBUG-61463] Fixed a failed assertion that could happen when emitting a
signal from another thread.
QtNetwork
---------
- QUdpSocket:
* [QTBUG-64718] Fixed a regression from Qt 5.9.3 caused by an apparent
Win32 API quirk we triggered when using readDatagram(), resulting in
an invalid QHostAddress sender address. receiveDatagram() was not
affected.
QtPrintSupport
--------------
- QPrintDialog:
* [QTBUG-63933] Properly pre-select explicitly requested printer on
Unix.
QtWidgets
---------
- QFileSystemModel:
* [QTBUG-46684] It is now possible to enable per-file watching by
setting the environment variable QT_FILESYSTEMMODEL_WATCH_FILES,
allowing to track for example changes in file size.
* [QTBUG-64098] Fixed column alignment issues.
* [QTBUG-62841] Fixed assert when monitoring directories.
- QPixmapCache:
* [QTBUG-65475] Changing application palette runtime will now affect
(and invalidate) cached widget pixmaps used by the current style.
- QTreeView:
* [QTBUG-57538] Fixed issue with drag and drop sometimes being inaccurate.
* [QTBUG-63396] Fixed issue with child indicator not drawn correctly in RTL mode.
* [QTBUG-63869] Fixed key navigation issue when using hidden items.
* [QTBUG-8376] Fixed row heights being wrong because of hidden columns.
- QTableView:
* [QTBUG-60219] Fixed grid lines being drawn outside header.
- QHeaderView:
* [QTBUG-53221] Fixed assert in QHeaderView because of layout changes.
* [QTBUG-65017] Fixed a font issue when using drag and drop.
* [QTBUG-56520] Fixed drawing issues in RTL mode.
* [QTBUG-41124] [QTBUG-54610] Fixed update issues.
- QWidget:
* [QTBUG-61213] Fixed crash related to the usage of Qt::WA_WindowPropagation.
- QPlainTextEdit:
* [QTBUG-62818] Fixed QPlainTextedit hanging because of scrollbar usage.
- QMenu:
* [QTBUG-63576] Fixed HiDPI issue in QFusionStyle for QCheckBoxes in QMenus.
* [QTBUG-59794] Fixed HiDPI issue in QMenu when using several screens.
- QMenuItem:
* [QTBUG-64055] Fixed drawing issue when setting a font style.
- QAbstractButton:
* [QTBUG-53244] Fixed issue with released signal not being emmited when using
several mouse buttons at the same time.
- QGraphicsEffect:
* [QTBUG-60231] Fixed crash when using child widgets with graphic effects.
Third-Party Code
----------------
- [QTBUG-65138] Fixed glitch in attribution documentation for Freetype
licenses / Qt Gui.
Platform Specific Changes
-------------------------
- eglfs:
* [QTBUG-65119] Fixed crash when using cursors and multiple GL contexts.
- iOS/tvOS:
* Qt will now take the safe area margins of the device into account when
computing layouts for QtWidgets.
- macOS:
* [QTBUG-57487][QTBUG-54160] If you have changed the button mapping of
your Wacom tablet in System Preferences, it will be respected by Qt
applications now. To revert to the old behavior, set the environment
variable QT_MAC_TABLET_IGNORE_BUTTON_MAPPING.
- macOS/iOS:
* [QTBUG-63476] Fixed an issue where text using one of the system theme
fonts would under certain circumstances display random glyphs.
- INTEGRITY:
* Added mkspec for INTEGRITY Qualcomm s820 MSM8996AU
- QNX:
* [QTBUG-64033] Fixed a build issue when using slog2 in QNX7.
- X11 / XCB:
* [QTBUG-62224] Minimal libXi version requirement has been updated from
1.7.4 to 1.7.5. This is because XIAllowTouchEvents is known to
deadlock with libXi 1.7.4 and earlier. When touch events are never
received, this is not an issue. Plain mouse / keyboard systems are not
affected.
configure & build system
------------------------
- [QTBUG-61431][QTBUG-62521] Fixed processing of *_LIBS_{DEBUG|RELEASE}=
configure command line arguments.
- [QTBUG-63452] Fixed bogus complaints about DUMMY platform when
re-configuring a build on a different day than initially configuring it.
- Fixed logic errors in the conditions of various Qt features.
qmake
-----
- [QTBUG-41246][QTBUG-50896][Xcode] It is now possible to enable generation
of dSYM debug symbols for release builds.
- [iOS] Fixed compilation of asset catalogs for a generic simulator.

View File

@ -1,3 +1,7 @@
# This avoids spurious errors when a project is explicitly disabled
# due to required Qt modules being missing.
!isEmpty(QMAKE_FAILED_REQUIREMENTS): return()
CONFIG *= thread
#handle defines

View File

@ -248,9 +248,9 @@ QString QStandardPaths::displayName(StandardLocation type)
if (QStandardPaths::ApplicationsLocation == type)
return QCoreApplication::translate("QStandardPaths", "Applications");
const QCFString fsPath(standardLocations(type).constFirst());
if (QCFType<CFURLRef> url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault,
standardLocations(type).constFirst().toCFString(),
kCFURLPOSIXPathStyle, true)) {
fsPath, kCFURLPOSIXPathStyle, true)) {
QCFString name;
CFURLCopyResourcePropertyForKey(url, kCFURLLocalizedNameKey, &name, NULL);
if (name && CFStringGetLength(name))

View File

@ -32,7 +32,7 @@ It allows browsers to, for example:
supported by Qt (by the QNetworkCookieJar class).",
"Homepage": "http://publicsuffix.org/",
"Version": "Generated on 2016-10-20 from revision 915565885d0fbd25caf7d8b339cd3478f558da94",
"Version": "Generated on 2018-01-04",
"License": "Mozilla Public License 2.0",
"LicenseFile": "PSL-LICENSE.txt",
"LicenseId": "MPL-2.0",

File diff suppressed because it is too large Load Diff

View File

@ -1467,6 +1467,9 @@ void QCoreApplication::postEvent(QObject *receiver, QEvent *event, int priority)
return;
}
if (event->type() == QEvent::DeferredDelete)
receiver->d_ptr->deleteLaterCalled = true;
if (event->type() == QEvent::DeferredDelete && data == QThreadData::current()) {
// remember the current running eventloop for DeferredDelete
// events posted in the receiver's thread.
@ -1526,22 +1529,34 @@ bool QCoreApplication::compressEvent(QEvent *event, QObject *receiver, QPostEven
return true;
}
}
} else
return false;
}
#endif
if ((event->type() == QEvent::DeferredDelete
|| event->type() == QEvent::Quit)
&& receiver->d_func()->postedEvents > 0) {
for (int i = 0; i < postedEvents->size(); ++i) {
const QPostEvent &cur = postedEvents->at(i);
if (cur.receiver != receiver
if (event->type() == QEvent::DeferredDelete) {
if (receiver->d_ptr->deleteLaterCalled) {
// there was a previous DeferredDelete event, so we can drop the new one
delete event;
return true;
}
// deleteLaterCalled is set to true in postedEvents when queueing the very first
// deferred deletion event.
return false;
}
if (event->type() == QEvent::Quit && receiver->d_func()->postedEvents > 0) {
for (int i = 0; i < postedEvents->size(); ++i) {
const QPostEvent &cur = postedEvents->at(i);
if (cur.receiver != receiver
|| cur.event == 0
|| cur.event->type() != event->type())
continue;
// found an event for this receiver
delete event;
return true;
}
continue;
// found an event for this receiver
delete event;
return true;
}
}
return false;
}
@ -2881,6 +2896,10 @@ void QCoreApplication::setEventDispatcher(QAbstractEventDispatcher *eventDispatc
If QCoreApplication is deleted and another QCoreApplication is created,
the startup function will be invoked again.
\note This macro is not suitable for use in library code that is then
statically linked into an application since the function may not be called
at all due to being eliminated by the linker.
*/
/*!

View File

@ -230,6 +230,7 @@ QObjectPrivate::QObjectPrivate(int version)
connectedSignals[0] = connectedSignals[1] = 0;
metaObject = 0;
isWindow = false;
deleteLaterCalled = false;
}
QObjectPrivate::~QObjectPrivate()

View File

@ -106,7 +106,8 @@ public:
uint sendChildEvents : 1;
uint receiveChildEvents : 1;
uint isWindow : 1; //for QWindow
uint unused : 25;
uint deleteLaterCalled : 1;
uint unused : 24;
int postedEvents;
QDynamicMetaObjectData *metaObject;
QMetaObject *dynamicMetaObject() const;

View File

@ -931,7 +931,8 @@ QImage::QImage(const uchar *data, int width, int height, int bytesPerLine, Forma
The loader attempts to read the image using the specified \a
format. If the \a format is not specified (which is the default),
the loader probes the file for a header to guess the file format.
it is auto-detected based on the file's suffix and header. For
details, see {QImageReader::setAutoDetectImageFormat()}{QImageReader}.
If the loading of the image failed, this object is a null image.
@ -3406,8 +3407,9 @@ void QImage::rgbSwapped_inplace()
and returns \c false.
The loader attempts to read the image using the specified \a format, e.g.,
PNG or JPG. If \a format is not specified (which is the default), the
loader probes the file for a header to guess the file format.
PNG or JPG. If \a format is not specified (which is the default), it is
auto-detected based on the file's suffix and header. For details, see
{QImageReader::setAutoDetectImageFormat()}{QImageReader}.
The file name can either refer to an actual file on disk or to one
of the application's embedded resources. See the
@ -3474,14 +3476,10 @@ bool QImage::loadFromData(const uchar *data, int len, const char *format)
Constructs a QImage from the first \a size bytes of the given
binary \a data. The loader attempts to read the image using the
specified \a format. If \a format is not specified (which is the default),
the loader probes the file for a header to guess the file format.
binary \a data. The loader attempts to read the image, either using the
optional image \a format specified or by determining the image format from
the data.
the loader probes the data for a header to guess the file format.
If \a format is not specified (which is the default), the loader probes the
file for a header to determine the file format. If \a format is specified,
it must be one of the values returned by QImageReader::supportedImageFormats().
If \a format is specified, it must be one of the values returned by
QImageReader::supportedImageFormats().
If the loading of the image fails, the image returned will be a null image.

View File

@ -186,6 +186,9 @@ QPaintDevice *QBackingStore::paintDevice()
*/
void QBackingStore::endPaint()
{
if (paintDevice()->paintingActive())
qWarning() << "QBackingStore::endPaint() called with active painter on backingstore paint device";
d_ptr->platformBackingStore->endPaint();
}

View File

@ -108,7 +108,7 @@ public Q_SLOTS:
}
protected:
bool event(QEvent *event)
bool event(QEvent *event) override
{
if (event->type() == QEvent::MetaCall) {
auto metaCallEvent = static_cast<QMetaCallEvent *>(event);

View File

@ -83,23 +83,11 @@
// We mean it.
//
/*
Cocoa Application Categories
*/
#include "qglobal.h"
#include "private/qcore_mac_p.h"
#import <AppKit/AppKit.h>
@class QT_MANGLE_NAMESPACE(QCocoaMenuLoader);
@interface NSApplication (QT_MANGLE_NAMESPACE(QApplicationIntegration))
- (void)QT_MANGLE_NAMESPACE(qt_setDockMenu):(NSMenu *)newMenu;
- (int)QT_MANGLE_NAMESPACE(qt_validModesForFontPanel):(NSFontPanel *)fontPanel;
- (void)QT_MANGLE_NAMESPACE(qt_sendPostedMessage):(NSEvent *)event;
- (BOOL)QT_MANGLE_NAMESPACE(qt_filterEvent):(NSEvent *)event;
@end
@interface QT_MANGLE_NAMESPACE(QNSApplication) : NSApplication {
}

View File

@ -82,25 +82,7 @@
QT_USE_NAMESPACE
@implementation NSApplication (QT_MANGLE_NAMESPACE(QApplicationIntegration))
- (void)QT_MANGLE_NAMESPACE(qt_setDockMenu):(NSMenu *)newMenu
{
[[QT_MANGLE_NAMESPACE(QCocoaApplicationDelegate) sharedDelegate] setDockMenu:newMenu];
}
- (int)QT_MANGLE_NAMESPACE(qt_validModesForFontPanel):(NSFontPanel *)fontPanel
{
Q_UNUSED(fontPanel);
// only display those things that QFont can handle
return NSFontPanelFaceModeMask
| NSFontPanelSizeModeMask
| NSFontPanelCollectionModeMask
| NSFontPanelUnderlineEffectModeMask
| NSFontPanelStrikethroughEffectModeMask;
}
- (void)QT_MANGLE_NAMESPACE(qt_sendPostedMessage):(NSEvent *)event
static void qt_sendPostedMessage(NSEvent *event)
{
// WARNING: data1 and data2 is truncated to from 64-bit to 32-bit on OS 10.5!
// That is why we need to split the address in two parts:
@ -128,7 +110,7 @@ QT_USE_NAMESPACE
static const QByteArray q_macLocalEventType = QByteArrayLiteral("mac_generic_NSEvent");
- (BOOL)QT_MANGLE_NAMESPACE(qt_filterEvent):(NSEvent *)event
static bool qt_filterEvent(NSEvent *event)
{
if (qApp && qApp->eventDispatcher()->
filterNativeEvent(q_macLocalEventType, static_cast<void*>(event), 0))
@ -137,7 +119,7 @@ static const QByteArray q_macLocalEventType = QByteArrayLiteral("mac_generic_NSE
if ([event type] == NSApplicationDefined) {
switch (static_cast<short>([event subtype])) {
case QtCocoaEventSubTypePostMessage:
[NSApp QT_MANGLE_NAMESPACE(qt_sendPostedMessage):event];
qt_sendPostedMessage(event);
return true;
default:
break;
@ -147,8 +129,6 @@ static const QByteArray q_macLocalEventType = QByteArrayLiteral("mac_generic_NSE
return false;
}
@end
static void qt_maybeSendKeyEquivalentUpEvent(NSEvent *event)
{
// Cocoa is known for not sending key up events for key
@ -180,7 +160,7 @@ static void qt_maybeSendKeyEquivalentUpEvent(NSEvent *event)
// be called instead of sendEvent if redirection occurs.
// 'self' will then be an instance of NSApplication
// (and not QNSApplication)
if (![NSApp QT_MANGLE_NAMESPACE(qt_filterEvent):event]) {
if (!qt_filterEvent(event)) {
[self QT_MANGLE_NAMESPACE(qt_sendEvent_original):event];
qt_maybeSendKeyEquivalentUpEvent(event);
}
@ -190,7 +170,7 @@ static void qt_maybeSendKeyEquivalentUpEvent(NSEvent *event)
{
// This method will be called if
// no redirection occurs
if (![NSApp QT_MANGLE_NAMESPACE(qt_filterEvent):event]) {
if (!qt_filterEvent(event)) {
[super sendEvent:event];
qt_maybeSendKeyEquivalentUpEvent(event);
}

View File

@ -49,7 +49,7 @@
QT_USE_NAMESPACE
@interface QT_MANGLE_NAMESPACE(QNSColorPanelDelegate) : NSObject<NSWindowDelegate, QT_MANGLE_NAMESPACE(QNSPanelDelegate)>
@interface QT_MANGLE_NAMESPACE(QNSColorPanelDelegate) : NSObject<NSWindowDelegate, QNSPanelDelegate>
{
@public
NSColorPanel *mColorPanel;

View File

@ -75,7 +75,7 @@ static QFont qfontForCocoaFont(NSFont *cocoaFont, const QFont &resolveFont)
@class QT_MANGLE_NAMESPACE(QNSFontPanelDelegate);
@interface QT_MANGLE_NAMESPACE(QNSFontPanelDelegate) : NSObject<NSWindowDelegate, QT_MANGLE_NAMESPACE(QNSPanelDelegate)>
@interface QT_MANGLE_NAMESPACE(QNSFontPanelDelegate) : NSObject<NSWindowDelegate, QNSPanelDelegate>
{
@public
NSFontPanel *mFontPanel;

View File

@ -164,7 +164,10 @@ T qt_mac_resolveOption(const T &fallback, QWindow *window, const QByteArray &pro
QT_END_NAMESPACE
@protocol QT_MANGLE_NAMESPACE(QNSPanelDelegate)
// @compatibility_alias doesn't work with protocols
#define QNSPanelDelegate QT_MANGLE_NAMESPACE(QNSPanelDelegate)
@protocol QNSPanelDelegate
@required
- (void)onOkClicked;
- (void)onCancelClicked;
@ -182,7 +185,7 @@ QT_END_NAMESPACE
@property (nonatomic, readonly) NSView *panelContents; // ARC: unretained, make it weak
@property (nonatomic, assign) NSEdgeInsets panelContentsMargins;
- (instancetype)initWithPanelDelegate:(id<QT_MANGLE_NAMESPACE(QNSPanelDelegate)>)panelDelegate;
- (instancetype)initWithPanelDelegate:(id<QNSPanelDelegate>)panelDelegate;
- (void)dealloc;
- (NSButton *)createButtonWithTitle:(const char *)title;

View File

@ -306,7 +306,7 @@ QT_END_NAMESPACE
@synthesize panelContents = _panelContents;
@synthesize panelContentsMargins = _panelContentsMargins;
- (instancetype)initWithPanelDelegate:(id<QT_MANGLE_NAMESPACE(QNSPanelDelegate)>)panelDelegate
- (instancetype)initWithPanelDelegate:(id<QNSPanelDelegate>)panelDelegate
{
if ((self = [super initWithFrame:NSZeroRect])) {
// create OK and Cancel buttons and add these as subviews

View File

@ -42,7 +42,7 @@
#include "qcocoamenu.h"
#include "qcocoamenubar.h"
#include "qcocoahelpers.h"
#include "qcocoaapplication.h"
#include "qcocoaapplicationdelegate.h"
#include "qcocoaintegration.h"
#include "qcocoaeventdispatcher.h"
@ -256,7 +256,7 @@ void QCocoaNativeInterface::setDockMenu(QPlatformMenu *platformMenu)
QMacAutoReleasePool pool;
QCocoaMenu *cocoaPlatformMenu = static_cast<QCocoaMenu *>(platformMenu);
NSMenu *menu = cocoaPlatformMenu->nsMenu();
[NSApp QT_MANGLE_NAMESPACE(qt_setDockMenu): menu];
[[QCocoaApplicationDelegate sharedDelegate] setDockMenu:menu];
}
void *QCocoaNativeInterface::qMenuToNSMenu(QPlatformMenu *platformMenu)

View File

@ -289,9 +289,6 @@ void QCocoaSystemTrayIcon::showMessage(const QString &title, const QString &mess
}
QT_END_NAMESPACE
@implementation NSStatusItem (Qt)
@end
@implementation QNSImageView
-(id)initWithParent:(QNSStatusItem*)myParent {
self = [super init];

View File

@ -48,10 +48,17 @@
QT_FORWARD_DECLARE_CLASS(QCocoaWindow)
// @compatibility_alias doesn't work with categories or their methods
#define FullScreenProperty QT_MANGLE_NAMESPACE(FullScreenProperty)
#define qt_fullScreen QT_MANGLE_NAMESPACE(qt_fullScreen)
@interface NSWindow (FullScreenProperty)
@property(readonly) BOOL qt_fullScreen;
@end
// @compatibility_alias doesn't work with protocols
#define QNSWindowProtocol QT_MANGLE_NAMESPACE(QNSWindowProtocol)
@protocol QNSWindowProtocol
@optional
- (BOOL)canBecomeKeyWindow;

View File

@ -1161,7 +1161,7 @@ static void qLibraryInit()
#endif // Q_NO_MYSQL_EMBEDDED
#ifdef MARIADB_BASE_VERSION
qAddPostRoutine(mysql_server_end);
qAddPostRoutine([]() { mysql_server_end(); });
#endif
}

View File

@ -237,6 +237,9 @@ void QTreeView::setModel(QAbstractItemModel *model)
// QAbstractItemView connects to a private slot
disconnect(d->model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(_q_rowsRemoved(QModelIndex,int,int)));
// do header layout after the tree
disconnect(d->model, SIGNAL(layoutChanged()),
d->header, SLOT(_q_layoutChanged()));
// QTreeView has a public slot for this
connect(d->model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(rowsRemoved(QModelIndex,int,int)));

View File

@ -3649,6 +3649,8 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
QFont oldFont = p->font();
if (subRule.hasFont)
p->setFont(subRule.font.resolve(p->font()));
else
p->setFont(mi.font);
// We fall back to drawing with the style sheet code whenever at least one of the
// items are styled in an incompatible way, such as having a background image.
@ -3765,8 +3767,7 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
}
}
if (subRule.hasFont)
p->setFont(oldFont);
p->setFont(oldFont);
return;
}

View File

@ -15,6 +15,7 @@ ubuntu-14.04
[modalWindowEnterEventOnHide_QTBUG35109]
ubuntu-14.04
ubuntu-16.04
osx ci
[modalDialogClosingOneOfTwoModal]
osx
[modalWindowModallity]

View File

@ -2029,9 +2029,6 @@ void tst_QWindow::modalWindowPosition()
#ifndef QT_NO_CURSOR
void tst_QWindow::modalWindowEnterEventOnHide_QTBUG35109()
{
if (QGuiApplication::platformName() == QLatin1String("cocoa"))
QSKIP("This test fails on OS X on CI");
if (isPlatformOffscreenOrMinimal())
QSKIP("Can't test window focusing on offscreen/minimal");

View File

@ -332,17 +332,6 @@ public:
endRemoveColumns();
}
void removeAddLastColumnLayoutChanged() // for taskQTBUG_41124
{
// make sure QHeaderView::_q_layoutChanged() is called
emit layoutAboutToBeChanged();
--cols;
emit layoutChanged();
emit layoutAboutToBeChanged();
++cols;
emit layoutChanged();
}
void removeAllColumns()
{
beginRemoveColumns(QModelIndex(), 0, cols - 1);
@ -1337,19 +1326,6 @@ void tst_QTreeView::columnHidden()
for (int c = 0; c < model.columnCount(); ++c)
QCOMPARE(view.isColumnHidden(c), true);
view.update();
// QTBUG_41124:
// QHeaderViewPrivate::_q_layoutChanged was not called because it was
// disconnected in QTreeView::setModel(). _q_layoutChanged restores
// the hidden sections which is tested here
view.setColumnHidden(model.cols - 1, true);
model.removeAddLastColumnLayoutChanged();
// we removed the last column and added a new one
// (with layoutToBeChanged/layoutChanged() for both) so column
// 1 is a new column and therefore must not be hidden when
// _q_layoutChanged() is called and is doing the right stuff
QCOMPARE(view.isColumnHidden(model.cols - 1), false);
}
void tst_QTreeView::rowHidden()