Lên mạng tìm hiểu thì ra nó không có hỗ trợ sự kiện đó nhưng có một cách thay thế đó là viết hàm bắt tất cả sự kiện trên control đó rồi chọn ra sự kiện muốn xử lý bằng cách overide lại hàm eventFilter().
Ví dụ mình muốn bắt sự kiện focus trong QLineEditBox:
class MainWindow : public QMainWindow { public: MainWindow(); protected: //Khai báo là sẽ override hàm eventFilter() bool eventFilter(QObject *obj, QEvent *ev); private: QLineEdit *textEdit; }; MainWindow::MainWindow() { textEdit = new QLinEdit; setCentralWidget(textEdit); // Câu lệnh này cài đặt eventFilter cho đối tượng textEdit //và đối tượng xử lý eventFilter là đối tượng hiện tại (MainWindow) textEdit->installEventFilter(this); } /* Obj là đối tương phát sinh sự kiện Event là loại sự kiện */ bool MainWindow::eventFilter(QObject *obj, QEvent *event) { // Nếu đối tượng là textEdit if (obj == textEdit) { // Nếu sự kiện là focus if (event->type() == QEvent::FocusIn) { // mỗi lần click vào sẽ chọn tất cả nội dung trong textEdit box. textEdit->selectAll(); // Trả về true nếu sự kiện xử lý thành công return true; } else { return false; } } else { // Nếu không phải là sự kiện cần bắt, trả về cho thằng cha xử lý return QMainWindow::eventFilter(obj, event); } }
Không có nhận xét nào:
Đăng nhận xét