Bạn phải tạo riêng của bạn FPS QQuickItem (hoặc QQuickPaintedItem) và đăng ký trong main.cpp của bạn sẽ được có sẵn trong mã QML của bạn.
Đây là một ví dụ.
class FPSText: public QQuickPaintedItem
{
Q_OBJECT
Q_PROPERTY(int fps READ fps NOTIFY fpsChanged)
public:
FPSText(QQuickItem *parent = 0);
~FPSText();
void paint(QPainter *);
Q_INVOKABLE int fps()const;
signals:
void fpsChanged(int);
private:
void recalculateFPS();
int _currentFPS;
int _cacheCount;
QVector<qint64> _times;
};
FPSText::FPSText(QQuickItem *parent): QQuickPaintedItem(parent), _currentFPS(0), _cacheCount(0)
{
_times.clear();
setFlag(QQuickItem::ItemHasContents);
}
FPSText::~FPSText()
{
}
void FPSText::recalculateFPS()
{
qint64 currentTime = QDateTime::currentDateTime().toMSecsSinceEpoch();
_times.push_back(currentTime);
while (_times[0] < currentTime - 1000) {
_times.pop_front();
}
int currentCount = _times.length();
_currentFPS = (currentCount + _cacheCount)/2;
qDebug() << _currentFPS;
if (currentCount != _cacheCount) fpsChanged(_currentFPS);
_cacheCount = currentCount;
}
int FPSText::fps()const
{
return _currentFPS;
}
void FPSText::paint(QPainter *painter)
{
recalculateFPS();
//qDebug() << __FUNCTION__;
QBrush brush(Qt::yellow);
painter->setBrush(brush);
painter->setPen(Qt::NoPen);
painter->setRenderHint(QPainter::Antialiasing);
painter->drawRoundedRect(0, 0, boundingRect().width(), boundingRect().height(), 0, 0);
update();
}
QML:
FPSText{
id: fps_text
x:0
y: 0;
width: 200
height: 100
Text {
anchors.centerIn: parent
text: fps_text.fps.toFixed(2)
}
}
Bạn có thể nhận được bất kỳ thi khác trong Internet với một tìm kiếm nhanh chóng.
Nguồn
2016-02-22 15:24:07
thank you very much! Điều này dường như hoạt động. Số được hiển thị đại diện cho khung hình/giây của toàn bộ khung nhìn/ứng dụng hay chỉ là hình chữ nhật được vẽ? Bạn có thể cung cấp giải thích nhanh về cách hoạt động không? – luffy
@Phím FPSText được quản lý bởi Đồ thị cảnh QML: http://doc.qt.io/qt-5/qtquick-visualcanvas-scenegraph.html và điểm trên mã ở trên để thu thập lại một khung hình là FPSText :: cập nhật() http://doc.qt.io/qt-5/qquickpainteditem.html#update –
Khắc phục sự cố nếu tôi sai nhưng .. Điều này có khả năng sẽ tạo ra một vòng lặp vô hạn với sự cống hiến của việc rút tài nguyên. –