memoryviewwidget.h (1258B)
1 #pragma once 2 #include <QtWidgets/QAbstractScrollArea> 3 4 // Based on https://stackoverflow.com/questions/46375673/how-can-realize-my-own-memory-viewer-by-qt 5 6 class MemoryViewWidget : public QAbstractScrollArea 7 { 8 public: 9 Q_OBJECT 10 public: 11 MemoryViewWidget(QWidget* parent = nullptr, size_t address_offset = 0, const void* data_ptr = nullptr, 12 size_t data_size = 0); 13 ~MemoryViewWidget(); 14 15 size_t addressOffset() const { return m_address_offset; } 16 17 void setData(size_t address_offset, const void* data_ptr, size_t data_size); 18 void setHighlightRange(size_t start, size_t end); 19 void clearHighlightRange(); 20 void scrolltoOffset(size_t offset); 21 void scrollToAddress(size_t address); 22 void setFont(const QFont& font); 23 24 protected: 25 void paintEvent(QPaintEvent*); 26 void resizeEvent(QResizeEvent*); 27 28 private Q_SLOTS: 29 void adjustContent(); 30 31 private: 32 int addressWidth() const; 33 int hexWidth() const; 34 int asciiWidth() const; 35 void updateMetrics(); 36 37 const void* m_data; 38 size_t m_data_size; 39 size_t m_address_offset; 40 41 size_t m_start_offset; 42 size_t m_end_offset; 43 44 size_t m_highlight_start = 0; 45 size_t m_highlight_end = 0; 46 47 unsigned m_bytes_per_line; 48 49 int m_char_width; 50 int m_char_height; 51 52 int m_rows_visible; 53 };