考虑以下 QAbstractItemModel 子类:
class MyItemModel : public QAbstractItemModel {
Q_OBJECT
public:
(...)
virtual int rowCount(const QModelIndex& parentIdx = QModelIndex()) const override;
(...)
};
还有一个用于显示 QTreeView 的简单 QDockWidget
class DockWidget : public QDockWidget {
Q_OBJECT
public:
DockWidget() {
view = new QTreeView();
setWidget(view);
}
private:
QTreeView *view;
}
如果我在 Windows MyItemModel::rowCount()上调用 DockWidget 构造函数,则会被调用。如果我在 Linux 上使用此代码,则不会调用MyItemModel::rowCount() 。这个对吗?
我怀疑 Qt for Windows 在调用QDockWidget::setWidget( ) 时会触发 rowCount() ,这在 Linux 上是不必要的。但这只是一个猜测。
Qt 版本 4.8.3,
Windows 7 64 位,
Ubuntu 32 和64 位