mirror of
https://github.com/crystalidea/qt6windows7.git
synced 2025-07-03 15:55:27 +08:00
qt 6.5.1 original
This commit is contained in:
11
tests/manual/wasm/eventloop/thread_exec/CMakeLists.txt
Normal file
11
tests/manual/wasm/eventloop/thread_exec/CMakeLists.txt
Normal file
@ -0,0 +1,11 @@
|
||||
# Copyright (C) 2022 The Qt Company Ltd.
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
qt_internal_add_manual_test(thread_exec
|
||||
GUI
|
||||
SOURCES
|
||||
main.cpp
|
||||
LIBRARIES
|
||||
Qt::Core
|
||||
Qt::Gui
|
||||
)
|
75
tests/manual/wasm/eventloop/thread_exec/main.cpp
Normal file
75
tests/manual/wasm/eventloop/thread_exec/main.cpp
Normal file
@ -0,0 +1,75 @@
|
||||
// Copyright (C) 2021 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
||||
#include <QtGui>
|
||||
|
||||
class EventTarget : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
protected:
|
||||
bool event(QEvent *evt)
|
||||
{
|
||||
if (evt->type() == QEvent::User) {
|
||||
qDebug() << "User event on thread" << QThread::currentThread();
|
||||
return true;
|
||||
}
|
||||
return QObject::event(evt);
|
||||
}
|
||||
};
|
||||
|
||||
class EventPosterWindow: public QRasterWindow
|
||||
{
|
||||
public:
|
||||
EventPosterWindow(EventTarget *target)
|
||||
:m_target(target)
|
||||
{ }
|
||||
|
||||
void paintEvent(QPaintEvent *ev) override {
|
||||
QPainter p(this);
|
||||
p.fillRect(ev->rect(), QColorConstants::Svg::deepskyblue);
|
||||
p.drawText(50, 100, "Application has started. Click to post events.\n See the developer tools console for debug output");
|
||||
}
|
||||
|
||||
void mousePressEvent(QMouseEvent *) override {
|
||||
qDebug() << "Posting events from thread" << QThread::currentThread();
|
||||
QGuiApplication::postEvent(m_target, new QEvent(QEvent::User));
|
||||
QTimer::singleShot(500, m_target, []() {
|
||||
qDebug() << "Timer event on secondary thread" << QThread::currentThread();
|
||||
});
|
||||
}
|
||||
|
||||
public:
|
||||
EventTarget *m_target;
|
||||
};
|
||||
|
||||
class SecondaryThread : public QThread
|
||||
{
|
||||
public:
|
||||
void run() override {
|
||||
qDebug() << "exec on secondary thread" << QThread::currentThread();
|
||||
exec();
|
||||
}
|
||||
};
|
||||
|
||||
// This example demonstrates how to start a secondary thread event loop
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
QGuiApplication app(argc, argv);
|
||||
|
||||
EventTarget eventTarget;
|
||||
|
||||
EventPosterWindow window(&eventTarget);
|
||||
window.show();
|
||||
|
||||
SecondaryThread thread;
|
||||
eventTarget.moveToThread(&thread);
|
||||
|
||||
#if QT_CONFIG(thread)
|
||||
thread.start();
|
||||
#else
|
||||
qDebug() << "Warning: This test requires a multithreaded build of Qt for WebAssembly";
|
||||
#endif
|
||||
|
||||
return app.exec();
|
||||
}
|
||||
|
||||
#include "main.moc"
|
Reference in New Issue
Block a user