chatview.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #ifndef CHATVIEW_H
  2. #define CHATVIEW_H
  3. #include <QListView>
  4. #include "chatmessagedelegate.h"
  5. #include "chatmessagemodel.h"
  6. class ChatView : public QListView
  7. {
  8. Q_OBJECT
  9. public:
  10. explicit ChatView(QWidget *parent = nullptr);
  11. void addMessage(const QString &text, const QString &avatar, const QString &senderName, bool isLeft);
  12. void addImageMessage(const QString &imagePath, const QString &avatar, const QString &senderName, bool isLeft, const QString &text = QString());
  13. void addSystemMessage(const QString &text);
  14. void clear();
  15. signals:
  16. void viewportWidthChanged(int width);
  17. protected:
  18. void mousePressEvent(QMouseEvent *event) override;
  19. void mouseReleaseEvent(QMouseEvent *event) override;
  20. void mouseMoveEvent(QMouseEvent *event) override;
  21. void keyPressEvent(QKeyEvent *event) override;
  22. void contextMenuEvent(QContextMenuEvent *event) override;
  23. void resizeEvent(QResizeEvent *event) override;
  24. private:
  25. ChatMessageModel *m_model;
  26. ChatMessageDelegate *m_delegate;
  27. bool m_selecting;
  28. QModelIndex m_currentMessageIndex;
  29. int m_selectionStartPos = -1;
  30. int m_selectionEndPos = -1;
  31. QMenu *m_contextMenu = nullptr;
  32. QString getSelectedText() const;
  33. void copySelectedText();
  34. void scrollToBottom();
  35. };
  36. #endif // CHATVIEW_H