QT를 ARM으로 사용하여 QT4에서 QTABWIDGET의 기본 닫기 버튼 (X)이 너무 작다는 것을 발견했으며 터치 패드로 누르기가 어렵습니다. 그래서 브라우저와 비슷한 더블 클릭 오프 기능을 생각했습니다. 이전에 C# 리소스 관리자에서 작업했기 때문에 DoubleClick을 직접 바인딩 할 수 있다고 생각했지만 검색 한 후 해당 슬롯을 찾을 수 없었습니다. 결과적으로 qtabwidget 태그가없는 마우스 이벤트 인 Qwidget에서 신호를 잡았습니다. 그것은 속임수입니다! 그런 다음 온라인에서 다양한 질문을 검색하고 다양한 질문을 찾았고 각 질문은 정확하게 대답했습니다. 마지막으로, 생각 한 후에는 실제로 효과가 없었기 때문에 Hock을 모방하기 위해 가장 바보 같은 방법을 사용했습니다!
그래서 나는 qtabwidget (tabbar ()가 보호되기 때문에 사기입니다!)를 다시로드하여 태그를 얻을 수 있습니다.
클래스 탭 : public qtabwidget {q_object public : tab (qwidget *parent =); qtabbar* getBar (); 보호 : void mousepressevent (qmouseevent *이벤트); }; 그런 다음 이벤트 필터를 구현할 때 먼저 이벤트가 이중 클릭 이벤트인지 여부를 결정한 다음 레이블 위치인지 여부를 결정하십시오. 그렇다면 현재 탭 페이지를 삭제하십시오. 이중 클릭 이벤트에서 클릭이 트리거되어야하므로 탭 페이지가 선택되므로 다른 탭 페이지를 두 번 클릭하여 발생하는 인덱스 변경 문제를 고려할 필요가 없습니다.
#ifndef myeventfilter_h #define myeventfilter_h #include <qmainwindow> #include <qmouseevent> #include "tab.h"extern int tabindex_current; 외부 int tabindex_old; 외부 탭 *tabwidget; 외부 Qpoint Tableft; extern int tabwidth; extern int tabheight; // 탭 태그 클래스를 닫으려면 두 번 클릭 구현 myeventFilter : public qobject {public : myeventFilter () : qobject () {}; ~ myeventFilter () {}; bool eventFilter (qobject* object, qevent* event) {if (event-> type () == qevent :: mousebuttondBlclick) {qmouseevent* e = static_cast <qmouseevent*> (이벤트); QPoint POS = E-> POS (); int x = tableft.x (); int x = tableft.x ()+tabwidth; int y = tableft.y (); int y = tableft.y ()+tabheight; if (pos.x ()> = x && pos.y ()> = y && pos.x () <= x && pos.y () <= y) tabwidget-> removetab (tabindex_current); } return qobject :: eventFilter (개체, 이벤트); }; }; #endif // myeventFilter_H 마지막으로 모든 이벤트를 캡처 할 수 있도록 메인 함수 메인에 바인딩하십시오.
qapp-> installeventFilter (new myeventFilter ());
또한 탭 페이지가 전환 될 때 너비 정보를 업데이트해야합니다 (높이를 업데이트 할 필요는 없습니다).
void mainWindow :: updatebar () {tabindex_current = tabwidget-> currentIndex (); tabindex_old = tabindex_current; qtabbar *bar = tabwidget-> getbar (); if (bar-> size (). width ()>) tabwidth = bar-> size (). width (); } 위의 것은 편집기가 소개 한 Qtabwidget 태그를 두 번 클릭하는 방법입니다 (권장). 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!