Download presentation
Presentation is loading. Please wait.
1
Slide design: Dr. Mark L. Hornick
SE3910 5/22/2018 SE3910 Week 5, Class 3 Today Qt Perhaps Physical Datarate Limits In Lab: No Quiz 17q3: 1-2,4,6-7,10-15,17,22,26-36 Print slides 20,21 on half sheets SE-2811 Slide design: Dr. Mark L. Hornick Content: Dr. Hornick Errors: Dr. Yoder Dr. Josiah Yoder
2
GUI Toolkits Java C# C/C++ AWT Swing SWT Java FX WPF Windows Forms
CS2852 5/22/2018 GUI Toolkits Java AWT Swing SWT Java FX C# WPF Windows Forms Silverlight GTK# C/C++ Qt FLTK GTK Motif MFC SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling Dr. Yoder
3
What makes a good toolkit?
CS2852 5/22/2018 What makes a good toolkit? Make table, fill in a few elements Do “Boardshot” SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling Dr. Yoder
4
Qt Features Fully object-oriented Utility classes
5/22/2018 Qt Features Fully object-oriented Utility classes Consistent interfaces OpenGL support Rich set of widgets (controls) Network support Database support Have native look and feel Plugin support Unicode/Internationalization support Drag and drop Customizable appearance GUI builder SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling Dr. Josiah Yoder
5
Qt Widgets Java Swing Qt CS2852 5/22/2018 Print large for me!
SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling Dr. Yoder
6
CS2852 5/22/2018 Example QT Widgets SE3910 Real Time Systems Dr. Yoder
7
QT Built in Dialog Boxes
CS2852 5/22/2018 QT Built in Dialog Boxes File dialog Font dialog Color dialog Printer dialog Similar to Java… SE3910 Real Time Systems Dr. Yoder
8
Layouts Java Qt FlowLayout GridLayout BorderLayout BoxLayout
SE3910 5/22/2018 Layouts Java FlowLayout GridLayout BorderLayout BoxLayout Qt FlowLayout (ex) QGridLayout BorderLayout (ex) QHBoxLayout QVBoxLayout SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling Dr. Josiah Yoder
9
Layouts in Java and Qt Layouts in Java Layouts in Qt (in JFrame)
SE3910 5/22/2018 Layouts in Java and Qt Layouts in Java (in JFrame) setLayout(layout) add(button) Layouts in Qt (in QMainWindow) layout->add(button) widget->setLayout(layout) setCentralWidget(widget) SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling Dr. Josiah Yoder
10
Events/Signals Java Qt What Design Pattern is this? Event
CS2852 5/22/2018 Events/Signals Java Event E.g. ActionEvent Event Listener E.g. ActionListener How does Java initiate an event? Qt Signal E.g. clicked() Slot E.g. on_pushButton_clicked emit What Design Pattern is this? SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling Dr. Yoder
11
CS2852 5/22/2018 Custom Events in Java How do you register an event with an event source in Java? How do you create your own event in Java? How do you fire an event in java? Define MOC and qmake on board SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling Dr. Yoder
12
Custom Events in QT emit progressNotification(1000 * seconds);
CS2852 5/22/2018 Custom Events in QT How do you register an event with an event source in QT? connect(button, SIGNAL(clicked()), qApp, SLOT(quit())); How do you create your own event in QT? signals: void clicked(); How do you fire an event in QT? emit progressNotification(1000 * seconds); Define MOC and qmake on board SE Dr. Josiah Yoder Slide style: Dr. Hornick Much Material: Dr. Schilling Dr. Yoder
13
Threading – qthreads (with corrections)
SE3910 5/22/2018 Threading – qthreads (with corrections) Java qthreads java.lang.Thread #include <QThread> No external jar needed (moc and friends take care of this) Thread t = new Thread(r) t.start(); QThread *t = new QThread; moveToThread(t); // note here interface Runnable { void run(); } QObject (e.g. QWidget (e.g. QMainWindow)) t.join(); connect the QThread::finish() signal to a slot that checks if all threads are done. Object o; QMutex synchronized(o) { … } … /* Garbage coll. */ Avoid sharing memory entirely… … see code example… ???? Dr. Josiah Yoder
14
Useful if you are into Qt slots/signals == events
5/22/2018 Useful if you are into Qt slots/signals == events “A QThread should be used much like a regular thread instance: prepare an object (QObject) class with all your desired functionality in it. Then create a new QThread instance, push the QObject onto it using moveToThread(QThread*) of the QObject instance and call start() on the QThread instance. That’s all.” I have successfully used this approach. SE-2811 Dr.Yoder Dr. Josiah Yoder
15
Qt’s connect method http://doc.qt.io/qt-5/qobject.html#connect
SE-2811 Dr.Yoder
16
Qt Connection types 1 2 3 0x80 Constant Value Description
Constant Value Description Qt::AutoConnection (Default) If the receiver lives inthe thread that emits the signal, Qt::DirectConnection is used. Otherwise, Qt::QueuedConnection is used. The connection type is determined when the signal is emitted. Qt::Direct Connection 1 The slot is invoked immediately when the signal is emitted. The slot is executed in the signalling thread. Qt::Queued Connection 2 The slot is invoked when control returns to the event loop of the receiver's thread. The slot is executed inhe t receiver's thread. Qt::Blocking QueuedConnection 3 Same as Qt::QueuedConnection, except that the signalling thread blocks until the slot returns. This connection must not be used if the receiver lives in the signalling thread, or else the application will deadlock. Qt::Unique Connection 0x80 This is a flag that can be combined with any one of the above connection types, using a bitwise OR. When Qt::UniqueConnection is set,QObject::connect() will fail if the connection already exists (i.e. if the same signal is already connected to the same slot for the same pair of objects). This flag was introduced in Qt 4.6. SE-2811 Dr.Yoder
17
Coding example. Exercise:
Both the Java and Qt solutions will behave poorly if I start multiple threads. Predict how each solution will behave if I: Click start // what happens? (For Java? For Qt?) Click stop SE-2811 Dr.Yoder
18
Week 10 Class 1 Communicating with Qt from a Non-Qt thread SE-2811
Dr.Yoder
19
Need invokeMethod Code example: QMetaObject::invokeMethod(&objWithSlot, “slotMethodName”, Qt::QueuedConnection, Q_ARG(QString, QString(“Hello!”))) (But avoid smart quotes) Like SwingUtilities.invokeLater() SE-2811 Dr.Yoder
20
Sharing Memory If you pass a pointer through a slot, both sender and receiver will have a pointer to the same memory. Some memory management care is needed to avoid issues here. SE-2811 Dr.Yoder
21
Slide design: Dr. Mark L. Hornick
References EB: Derek Malloy, Exploring Beaglebone, Wiley, 2015 Laplante and Ovaska, Real-Time Systems Design and Analysis, Fourth Edition, Wiley, 2012 SE-2811 Slide design: Dr. Mark L. Hornick Content: Dr. Hornick Errors: Dr. Yoder
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.