#include <QWidget>
#include <Qt>
+#include <QThread>
+
class DrawingWindow: public QWidget {
/* Q_OBJECT */
public:
- typedef int (*ThreadFunction)(DrawingWindow &);
+ typedef void (*ThreadFunction)(DrawingWindow &);
static const int DEFAULT_WIDTH = 640;
static const int DEFAULT_HEIGHT = 480;
void drawLine(int x1, int y1, int x2, int y2);
protected:
+ void closeEvent(QCloseEvent *ev);
void paintEvent(QPaintEvent *ev);
void showEvent(QShowEvent *ev);
void timerEvent(QTimerEvent *ev);
private:
- class DrawingThread;
+ class DrawingThread: public QThread {
+ public:
+ DrawingThread(DrawingWindow &w, ThreadFunction f);
+ void run();
+
+ void enableTerminate();
+ void disableTerminate();
+
+ private:
+ DrawingWindow &drawingWindow;
+ ThreadFunction threadFunction;
+
+ };
static const int paintInterval = 33;
inline
void DrawingWindow::lock()
{
+ thread->disableTerminate();
mutex.lock();
}
void DrawingWindow::unlock()
{
mutex.unlock();
+ thread->enableTerminate();
}
inline
setDirtyRect(r.normalized());
}
+inline
+void DrawingWindow::DrawingThread::enableTerminate()
+{
+ setTerminationEnabled(true);
+}
+
+inline
+void DrawingWindow::DrawingThread::disableTerminate()
+{
+ setTerminationEnabled(false);
+}
+
#endif // !DRAWING_WINDOW_H