Compare commits
4 Commits
Author | SHA1 | Date |
---|---|---|
Hendrik Schutter | 41900f7d93 | |
Hendrik Schutter | 620d7df720 | |
Hendrik Schutter | 9e3db3865a | |
Hendrik Schutter | 66a18ca17a |
|
@ -1,6 +1,4 @@
|
||||||
QT += core gui
|
QT += quick
|
||||||
|
|
||||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
|
||||||
|
|
||||||
CONFIG += c++11
|
CONFIG += c++11
|
||||||
|
|
||||||
|
@ -9,16 +7,21 @@ CONFIG += c++11
|
||||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
main.cpp \
|
frequencymonitor.cpp \
|
||||||
mainwindow.cpp
|
main.cpp
|
||||||
|
|
||||||
HEADERS += \
|
RESOURCES += qml.qrc
|
||||||
mainwindow.h
|
|
||||||
|
|
||||||
FORMS += \
|
# Additional import path used to resolve QML modules in Qt Creator's code model
|
||||||
mainwindow.ui
|
QML_IMPORT_PATH =
|
||||||
|
|
||||||
|
# Additional import path used to resolve QML modules just for Qt Quick Designer
|
||||||
|
QML_DESIGNER_IMPORT_PATH =
|
||||||
|
|
||||||
# Default rules for deployment.
|
# Default rules for deployment.
|
||||||
qnx: target.path = /tmp/$${TARGET}/bin
|
qnx: target.path = /tmp/$${TARGET}/bin
|
||||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||||
!isEmpty(target.path): INSTALLS += target
|
!isEmpty(target.path): INSTALLS += target
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
frequencymonitor.h
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
import QtQuick 2.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
|
||||||
|
function randomInteger(min, max) {
|
||||||
|
return Math.floor(Math.random() * (max - min + 1)) + min;
|
||||||
|
}
|
||||||
|
|
||||||
|
width:100
|
||||||
|
height:100
|
||||||
|
color:Qt.rgba(Math.random(),Math.random(),Math.random(),1);
|
||||||
|
NumberAnimation on x {loops: Animation.Infinite; from: randomInteger(0, 1920); to: randomInteger(0, 1920); duration: 500 }
|
||||||
|
NumberAnimation on y {loops: Animation.Infinite; from: randomInteger(0, 900); to: randomInteger(0, 900); duration: 500 }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
#include "frequencymonitor.h"
|
||||||
|
#include <QQuickWindow>
|
||||||
|
|
||||||
|
FrequencyMonitor::FrequencyMonitor(QQuickItem *parent) :
|
||||||
|
QQuickItem(parent),
|
||||||
|
m_counter(0),
|
||||||
|
m_refreshPeriod(1000)
|
||||||
|
{
|
||||||
|
connect(this, &FrequencyMonitor::windowChanged, this, &FrequencyMonitor::handleWindowChanged);
|
||||||
|
}
|
||||||
|
|
||||||
|
int FrequencyMonitor::fps() const
|
||||||
|
{
|
||||||
|
return m_fps;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrequencyMonitor::setFps(int fps)
|
||||||
|
{
|
||||||
|
if (m_fps == fps)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_fps = fps;
|
||||||
|
emit fpsChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
int FrequencyMonitor::refreshPeriod() const
|
||||||
|
{
|
||||||
|
return m_refreshPeriod;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrequencyMonitor::setRefreshPeriod(int msec)
|
||||||
|
{
|
||||||
|
if (m_refreshPeriod == msec)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_refreshPeriod = msec;
|
||||||
|
emit refreshPeriodChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrequencyMonitor::handleAfterRendering()
|
||||||
|
{
|
||||||
|
const int elapsedMsec = m_time.elapsed();
|
||||||
|
|
||||||
|
m_counter++;
|
||||||
|
|
||||||
|
if (elapsedMsec >= m_refreshPeriod)
|
||||||
|
{
|
||||||
|
setFps(m_counter / (elapsedMsec / 1000.0));
|
||||||
|
|
||||||
|
m_counter = 0;
|
||||||
|
m_time.restart();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FrequencyMonitor::handleWindowChanged(QQuickWindow *window)
|
||||||
|
{
|
||||||
|
if (m_windowConnection)
|
||||||
|
this->disconnect(m_windowConnection);
|
||||||
|
|
||||||
|
if (window)
|
||||||
|
{
|
||||||
|
m_time.restart();
|
||||||
|
m_windowConnection = connect(window, &QQuickWindow::afterRendering, this, &FrequencyMonitor::handleAfterRendering);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
#ifndef FREQUENCYMONITOR_H
|
||||||
|
#define FREQUENCYMONITOR_H
|
||||||
|
|
||||||
|
#include <QQuickItem>
|
||||||
|
#include <QTime>
|
||||||
|
#include <QMetaObject>
|
||||||
|
|
||||||
|
class QQuickWindow;
|
||||||
|
|
||||||
|
class FrequencyMonitor : public QQuickItem
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(int fps READ fps NOTIFY fpsChanged)
|
||||||
|
Q_PROPERTY(int refreshPeriod READ refreshPeriod WRITE setRefreshPeriod NOTIFY refreshPeriodChanged)
|
||||||
|
public:
|
||||||
|
explicit FrequencyMonitor(QQuickItem *parent = 0);
|
||||||
|
|
||||||
|
int fps() const;
|
||||||
|
void setFps(int fps);
|
||||||
|
|
||||||
|
// by default refresh one time per 1000 msec
|
||||||
|
int refreshPeriod() const;
|
||||||
|
void setRefreshPeriod(int msec);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void fpsChanged();
|
||||||
|
void refreshPeriodChanged();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void handleAfterRendering();
|
||||||
|
void handleWindowChanged(QQuickWindow * window);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
QMetaObject::Connection m_windowConnection;
|
||||||
|
QTime m_time;
|
||||||
|
int m_fps;
|
||||||
|
int m_counter;
|
||||||
|
int m_refreshPeriod;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // FREQUENCYMONITOR_H
|
|
@ -1,11 +1,26 @@
|
||||||
#include "mainwindow.h"
|
#include <QGuiApplication>
|
||||||
|
#include <QQmlApplicationEngine>
|
||||||
|
#include "frequencymonitor.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <QApplication>
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
QApplication a(argc, argv);
|
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||||
MainWindow w;
|
|
||||||
w.show();
|
QGuiApplication app(argc, argv);
|
||||||
return a.exec();
|
|
||||||
|
qmlRegisterType<FrequencyMonitor>("be.mindgoo.tools", 0, 1, "FrequencyMonitor");
|
||||||
|
|
||||||
|
QQmlApplicationEngine engine;
|
||||||
|
const QUrl url(QStringLiteral("qrc:/main.qml"));
|
||||||
|
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
|
||||||
|
&app, [url](QObject *obj, const QUrl &objUrl) {
|
||||||
|
if (!obj && url == objUrl)
|
||||||
|
QCoreApplication::exit(-1);
|
||||||
|
}, Qt::QueuedConnection);
|
||||||
|
engine.load(url);
|
||||||
|
|
||||||
|
return app.exec();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
import QtQuick 2.12
|
||||||
|
import QtQuick.Window 2.12
|
||||||
|
import QtQuick.Controls 2.3
|
||||||
|
import be.mindgoo.tools 0.1
|
||||||
|
|
||||||
|
Window {
|
||||||
|
id: rootwin
|
||||||
|
width: 1920
|
||||||
|
height: 1080
|
||||||
|
visible: true
|
||||||
|
|
||||||
|
property var elements: 0
|
||||||
|
|
||||||
|
FrequencyMonitor {
|
||||||
|
id: monitor
|
||||||
|
refreshPeriod: 500
|
||||||
|
}
|
||||||
|
|
||||||
|
function doSomething(){
|
||||||
|
rootwin.elements++
|
||||||
|
var component = Qt.createComponent("Rect.qml");
|
||||||
|
var rect = component.createObject(rootwin,{"x":0,"y":0});
|
||||||
|
if(rect !== null ) {
|
||||||
|
rect.name = "Test";
|
||||||
|
rect.x = Math.floor(Math.random() * 100 );
|
||||||
|
rect.y = Math.floor(Math.random() * 100 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Button{
|
||||||
|
id: doBtn
|
||||||
|
text: "do"
|
||||||
|
x: 20
|
||||||
|
y: 1000
|
||||||
|
onClicked: rootwin.doSomething()
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: fpsCounter
|
||||||
|
x: 200
|
||||||
|
y: 1000
|
||||||
|
text: "FPS: " + monitor.fps
|
||||||
|
}
|
||||||
|
|
||||||
|
Text {
|
||||||
|
id: elementsCounter
|
||||||
|
x: 300
|
||||||
|
y: 1000
|
||||||
|
text: "Elements: " + rootwin.elements
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*##^##
|
||||||
|
Designer {
|
||||||
|
D{i:0;formeditorZoom:2}
|
||||||
|
}
|
||||||
|
##^##*/
|
|
@ -1,15 +0,0 @@
|
||||||
#include "mainwindow.h"
|
|
||||||
#include "ui_mainwindow.h"
|
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent)
|
|
||||||
: QMainWindow(parent)
|
|
||||||
, ui(new Ui::MainWindow)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
#ifndef MAINWINDOW_H
|
|
||||||
#define MAINWINDOW_H
|
|
||||||
|
|
||||||
#include <QMainWindow>
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
namespace Ui { class MainWindow; }
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
class MainWindow : public QMainWindow
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
MainWindow(QWidget *parent = nullptr);
|
|
||||||
~MainWindow();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::MainWindow *ui;
|
|
||||||
};
|
|
||||||
#endif // MAINWINDOW_H
|
|
|
@ -1,126 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>MainWindow</class>
|
|
||||||
<widget class="QMainWindow" name="MainWindow">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>800</width>
|
|
||||||
<height>600</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>MainWindow</string>
|
|
||||||
</property>
|
|
||||||
<widget class="QWidget" name="centralwidget">
|
|
||||||
<widget class="QWidget" name="gridLayoutWidget">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>140</x>
|
|
||||||
<y>70</y>
|
|
||||||
<width>281</width>
|
|
||||||
<height>251</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>20</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>20</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>20</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>20</number>
|
|
||||||
</property>
|
|
||||||
<property name="horizontalSpacing">
|
|
||||||
<number>90</number>
|
|
||||||
</property>
|
|
||||||
<property name="verticalSpacing">
|
|
||||||
<number>6</number>
|
|
||||||
</property>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<widget class="QCheckBox" name="checkBox">
|
|
||||||
<property name="text">
|
|
||||||
<string>CheckBox</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLineEdit" name="lineEdit">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>9</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Label</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="6" column="0">
|
|
||||||
<widget class="QDateEdit" name="dateEdit"/>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="0">
|
|
||||||
<widget class="QSlider" name="horizontalSlider">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="5" column="0">
|
|
||||||
<widget class="QComboBox" name="comboBox">
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>First</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<property name="text">
|
|
||||||
<string>Second</string>
|
|
||||||
</property>
|
|
||||||
</item>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QPushButton" name="pushButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>PushButton</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="8" column="0">
|
|
||||||
<widget class="QProgressBar" name="progressBar">
|
|
||||||
<property name="value">
|
|
||||||
<number>24</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
<widget class="QMenuBar" name="menubar">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>800</width>
|
|
||||||
<height>23</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="QStatusBar" name="statusbar"/>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
<RCC>
|
||||||
|
<qresource prefix="/">
|
||||||
|
<file>main.qml</file>
|
||||||
|
<file>Rect.qml</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
Loading…
Reference in New Issue