将textEdit提升为自定义的类
image.png

mytextedit.h文件**

  1. #ifndef MYTEXTEDIT_H
  2. #define MYTEXTEDIT_H
  3. #include <QWidget>
  4. #include <QTextEdit>
  5. class MyTextEdit : public QTextEdit
  6. {
  7. Q_OBJECT
  8. public:
  9. explicit MyTextEdit(QWidget *parent = nullptr);
  10. void focusInEvent(QFocusEvent *event); //覆盖这两个函数
  11. void focusOutEvent(QFocusEvent *event);
  12. signals:
  13. void GetFocus(); //获得焦点信号
  14. void LostFocus(); //失去焦点信号
  15. public slots:
  16. void Slot_GetFocus();
  17. void Slot_LostFocus(QString*);
  18. };
  19. #endif // MYTEXTEDIT_H

mytextedit.cpp文件

  1. #include "mytextedit.h"
  2. #include <QDebug>
  3. MyTextEdit::MyTextEdit(QWidget *parent) : QTextEdit(parent)
  4. {
  5. this->setFocusPolicy(Qt::StrongFocus);
  6. }
  7. // 获取焦点事件
  8. void MyTextEdit::focusInEvent(QFocusEvent *event)
  9. {
  10. QTextEdit::focusInEvent(event);
  11. emit Slot_GetFocus(); // 触发失去焦点槽函数
  12. }
  13. // 获取焦点函数
  14. void MyTextEdit::Slot_GetFocus()
  15. {
  16. qDebug() << "22222";
  17. emit GetFocus(); // 发送获取焦点信号
  18. }
  19. // 失去焦点事件
  20. void MyTextEdit::focusOutEvent(QFocusEvent *event)
  21. {
  22. QTextEdit::focusOutEvent(event);
  23. QString c = "22";
  24. //this->toPlainText()
  25. emit Slot_LostFocus(&c);
  26. }
  27. // 失去焦点函数
  28. void MyTextEdit::Slot_LostFocus(QString*)
  29. {
  30. //
  31. qDebug() << "1111";
  32. emit LostFocus(); // 发送失去焦点信号
  33. }

mainwindow.h文件

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. namespace Ui {
  5. class MainWindow;
  6. }
  7. class MainWindow : public QMainWindow
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit MainWindow(QWidget *parent = 0);
  12. ~MainWindow();
  13. private:
  14. Ui::MainWindow *ui;
  15. private slots:
  16. //定义槽函数处理textEdit focus信号
  17. void GetFocus_Fun();
  18. void LostFocus_Fun();
  19. };
  20. #endif // MAINWINDOW_H


mainwindow.cpp文件**

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <mytextedit.h>
  4. #include <QDebug>
  5. MainWindow::MainWindow(QWidget *parent) :
  6. QMainWindow(parent),
  7. ui(new Ui::MainWindow)
  8. {
  9. ui->setupUi(this);
  10. // 在widget的构造函数绑定textEdit的focus信号
  11. connect(ui->textEdit, SIGNAL(GetFocus()), this, SLOT(GetFocus_Fun()));
  12. connect(ui->textEdit, SIGNAL(LostFocus()), this, SLOT(LostFocus_Fun()));
  13. }
  14. MainWindow::~MainWindow()
  15. {
  16. delete ui;
  17. }
  18. // 焦点失去时,背景颜色变红
  19. void MainWindow::GetFocus_Fun()
  20. {
  21. //在处理textEdit 函数里我们将textEdit背景色变为红色
  22. ui->textEdit->setStyleSheet("background-color:red");
  23. qDebug() << "改变了颜色";
  24. }
  25. // 焦点失去时,背景颜色变白
  26. void MainWindow::LostFocus_Fun()
  27. {
  28. //在处理textEdit 函数里我们将textEdit背景色变为红色
  29. ui->textEdit->setStyleSheet("background-color:white");
  30. qDebug() << "改变了颜色";
  31. }

获取焦点状态
image.png

失去焦点状态
image.png

test3.zip
参考文档:

Qt 给控件QLineEdit添加clicked事件方法

https://www.cnblogs.com/qiantao/p/9638050.html