| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #ifndef CHATWINDOW_H
- #define CHATWINDOW_H
- #include <QDateTime>
- #include <QFileDialog>
- #include <QHBoxLayout>
- #include <QLineEdit>
- #include <QMainWindow>
- #include <QPushButton>
- #include <QVBoxLayout>
- #include <QCloseEvent>
- #include <QTextEdit>
- #include <QLabel>
- #include <QScrollArea>
- #include <QMimeData>
- #include <QDragEnterEvent>
- #include <QDropEvent>
- #include <QPixmap>
- #include <QContextMenuEvent>
- #include <QMap>
- #include <QTimer>
- #include "network/websocketclient.h"
- class ChatView;
- // 多格式输入框类
- class MultiFormatInputEdit : public QTextEdit
- {
- Q_OBJECT
- public:
- explicit MultiFormatInputEdit(QWidget *parent = nullptr);
-
- // 获取纯文本内容
- QString getPlainText() const;
-
- // 获取所有图片路径
- QStringList getImagePaths() const;
-
- // 添加图片到输入框
- void insertImage(const QString &imagePath);
-
- // 清空内容
- void clearContent();
-
- // 验证输入内容
- bool validateContent() const;
-
- // 移除指定图片
- void removeImage(const QString &imagePath);
- signals:
- void contentChanged();
- void imageInserted(const QString &imagePath);
- void imageRemoved(const QString &imagePath);
- void sendRequested();
- protected:
- void dragEnterEvent(QDragEnterEvent *event) override;
- void dropEvent(QDropEvent *event) override;
- void keyPressEvent(QKeyEvent *event) override;
- void insertFromMimeData(const QMimeData *source) override;
- void contextMenuEvent(QContextMenuEvent *event) override;
- private slots:
- void onTextChanged();
- private:
- QStringList m_imagePaths;
- QMap<QString, QString> m_imageResourceMap; // 图片路径到资源名称的映射
-
- void processImageData(const QByteArray &imageData, const QString &format = "PNG");
- bool isImageFormat(const QString &fileName) const;
- QString saveImageToTemp(const QPixmap &pixmap, const QString &format = "PNG");
- void insertImageIntoDocument(const QString &imagePath);
- QString generateResourceName(const QString &imagePath);
- };
- class ChatWindow : public QWidget
- {
- Q_OBJECT
- public:
- ChatWindow(WebSocketClient *webSocketClient, QWidget *parent = nullptr);
- void initWebsocket(const QString &roomId);
- protected:
- void closeEvent(QCloseEvent *event) override;
- signals:
- void windowCloseRequested();
- private slots:
- void onSendClicked();
- void onImageClicked();
- void onFileClicked();
- void onRecallClicked();
- void onInputContentChanged();
- void onImageInserted(const QString &imagePath);
- void onQuickButtonClicked();
- void onStreamNotification(bool show);
- void hideQuickButtons();
- void onStreamButtonClicked();
- private:
- ChatView *m_messageView;
- MultiFormatInputEdit *m_inputEdit;
- QPushButton *m_sendButton;
- QPushButton *m_imageButton;
- QPushButton *m_fileButton;
- QPushButton *m_streamButton;
- QButtonGroup *m_quickButtonGroup;
- QWidget *m_quickButtonContainer;
- QTimer *m_hideTimer;
- QString m_roomId;
- WebSocketClient *m_webSocketClient;
- void setupUI();
- void setupInputArea();
- void connectSignals();
- void sendMessage();
- void sendImageMessage(const QString &imagePath, const QString &text = QString());
- bool validateInput() const;
- void showQuickButtons();
- void setQuickButtonsVisible(bool visible);
- };
- #endif // CHATWINDOW_H
|