mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-04 08:15:30 +08:00
qt 6.5.1 original
This commit is contained in:
37
examples/corelib/tools/contiguouscache/CMakeLists.txt
Normal file
37
examples/corelib/tools/contiguouscache/CMakeLists.txt
Normal file
@ -0,0 +1,37 @@
|
||||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(contiguouscache LANGUAGES CXX)
|
||||
|
||||
if(NOT DEFINED INSTALL_EXAMPLESDIR)
|
||||
set(INSTALL_EXAMPLESDIR "examples")
|
||||
endif()
|
||||
|
||||
set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/corelib/tools/contiguouscache")
|
||||
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
|
||||
|
||||
qt_standard_project_setup()
|
||||
|
||||
qt_add_executable(contiguouscache
|
||||
main.cpp
|
||||
randomlistmodel.cpp randomlistmodel.h
|
||||
)
|
||||
|
||||
set_target_properties(contiguouscache PROPERTIES
|
||||
WIN32_EXECUTABLE TRUE
|
||||
MACOSX_BUNDLE TRUE
|
||||
)
|
||||
|
||||
target_link_libraries(contiguouscache PRIVATE
|
||||
Qt6::Core
|
||||
Qt6::Gui
|
||||
Qt6::Widgets
|
||||
)
|
||||
|
||||
install(TARGETS contiguouscache
|
||||
RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
|
||||
)
|
10
examples/corelib/tools/contiguouscache/contiguouscache.pro
Normal file
10
examples/corelib/tools/contiguouscache/contiguouscache.pro
Normal file
@ -0,0 +1,10 @@
|
||||
QT += widgets
|
||||
requires(qtConfig(listview))
|
||||
|
||||
HEADERS = randomlistmodel.h
|
||||
SOURCES = randomlistmodel.cpp \
|
||||
main.cpp
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/corelib/tools/contiguouscache
|
||||
INSTALLS += target
|
18
examples/corelib/tools/contiguouscache/main.cpp
Normal file
18
examples/corelib/tools/contiguouscache/main.cpp
Normal file
@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
|
||||
#include "randomlistmodel.h"
|
||||
#include <QListView>
|
||||
#include <QApplication>
|
||||
|
||||
int main(int c, char **v)
|
||||
{
|
||||
QApplication a(c, v);
|
||||
|
||||
QListView view;
|
||||
view.setUniformItemSizes(true);
|
||||
view.setModel(new RandomListModel(&view));
|
||||
view.show();
|
||||
|
||||
return a.exec();
|
||||
}
|
59
examples/corelib/tools/contiguouscache/randomlistmodel.cpp
Normal file
59
examples/corelib/tools/contiguouscache/randomlistmodel.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
#include "randomlistmodel.h"
|
||||
#include <QRandomGenerator>
|
||||
|
||||
static const int bufferSize(500);
|
||||
static const int lookAhead(100);
|
||||
static const int halfLookAhead(lookAhead/2);
|
||||
|
||||
RandomListModel::RandomListModel(QObject *parent)
|
||||
: QAbstractListModel(parent), m_rows(bufferSize), m_count(10000)
|
||||
{
|
||||
}
|
||||
|
||||
RandomListModel::~RandomListModel()
|
||||
{
|
||||
}
|
||||
|
||||
int RandomListModel::rowCount(const QModelIndex &) const
|
||||
{
|
||||
return m_count;
|
||||
}
|
||||
|
||||
//! [0]
|
||||
QVariant RandomListModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (role != Qt::DisplayRole)
|
||||
return QVariant();
|
||||
|
||||
int row = index.row();
|
||||
|
||||
if (row > m_rows.lastIndex()) {
|
||||
if (row - m_rows.lastIndex() > lookAhead)
|
||||
cacheRows(row-halfLookAhead, qMin(m_count, row+halfLookAhead));
|
||||
else while (row > m_rows.lastIndex())
|
||||
m_rows.append(fetchRow(m_rows.lastIndex()+1));
|
||||
} else if (row < m_rows.firstIndex()) {
|
||||
if (m_rows.firstIndex() - row > lookAhead)
|
||||
cacheRows(qMax(0, row-halfLookAhead), row+halfLookAhead);
|
||||
else while (row < m_rows.firstIndex())
|
||||
m_rows.prepend(fetchRow(m_rows.firstIndex()-1));
|
||||
}
|
||||
|
||||
return m_rows.at(row);
|
||||
}
|
||||
|
||||
void RandomListModel::cacheRows(int from, int to) const
|
||||
{
|
||||
for (int i = from; i <= to; ++i)
|
||||
m_rows.insert(i, fetchRow(i));
|
||||
}
|
||||
//![0]
|
||||
|
||||
//![1]
|
||||
QString RandomListModel::fetchRow(int position) const
|
||||
{
|
||||
return QString::number(QRandomGenerator::global()->bounded(++position));
|
||||
}
|
||||
//![1]
|
29
examples/corelib/tools/contiguouscache/randomlistmodel.h
Normal file
29
examples/corelib/tools/contiguouscache/randomlistmodel.h
Normal file
@ -0,0 +1,29 @@
|
||||
// Copyright (C) 2016 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
#ifndef RANDOMLISTMODEL_H
|
||||
#define RANDOMLISTMODEL_H
|
||||
|
||||
#include <QContiguousCache>
|
||||
#include <QAbstractListModel>
|
||||
|
||||
QT_FORWARD_DECLARE_CLASS(QTimer)
|
||||
|
||||
class RandomListModel : public QAbstractListModel
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
RandomListModel(QObject *parent = nullptr);
|
||||
~RandomListModel();
|
||||
|
||||
int rowCount(const QModelIndex & = QModelIndex()) const override;
|
||||
QVariant data(const QModelIndex &, int) const override;
|
||||
|
||||
private:
|
||||
void cacheRows(int, int) const;
|
||||
QString fetchRow(int) const;
|
||||
|
||||
mutable QContiguousCache<QString> m_rows;
|
||||
const int m_count;
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user