Usei o QT como ARM e descobri que o botão de fechamento nativo (x) do Qtabwidget no QT4 é muito pequeno e é difícil pressionar com o touchpad. Por isso, pensei em uma função de clique duas vezes semelhante ao navegador. Como eu já havia trabalhado no gerente de recursos C# antes, pensei que poderia vincular diretamente o DoubleClick, mas depois de pesquisá -lo, não consegui encontrar o slot correspondente. Como resultado, peguei o sinal no Qwidget, que foi um evento de mouse sem a tag Qtabwidget. Isso é um truque! Então, pesquisei várias perguntas on -line e encontrei várias perguntas, e cada uma respondeu com precisão ... finalmente, depois de pensar nisso, realmente não funcionou, então usei o método mais estúpido para imitar o Hock!
Então, eu recarreguei o qtabwidget (porque o TabBar () está protegido, é uma farsa!), Para que eu possa obter a tag.
Guia da classe: public qtabwidget {q_object public: tab (qwidget *pai =); Qtabbar* getbar (); protegido: void mousePrimevent (evento qmouseevent *); }; Em seguida, ao implementar um filtro de eventos, primeiro determine se o evento é um evento de clique duas vezes e, em seguida, determine se é a posição do rótulo. Nesse caso, exclua a página da guia atual. Como o clique deve ser acionado no evento de clique duas vezes, ou seja, a página da guia é selecionada, portanto, não há necessidade de considerar o problema de mudança de índice causado pelo clique duas vezes em outras páginas da guia.
#ifndef myeventfilter_h #define myeventfilter_h #include <MainWindow> #include <MouSouvevent> #include "tab.h" extern int tabindex_current; extern int tabindex_old; Tab extern *tabwidget; Tabela QPoint externa; extern int tabwidth; extern int tabHeight; // Implementar clique duas vezes para fechar a tag da tag da guia myeventfilter: public qobject {public: myEventFilter (): qobject () {}; ~ myEventFilter () {}; bool EventFilter (QOBJET* Objeto, Qevent* Event) {if (event-> type () == Qevent :: mouseButtondblClick) {qmouseEvent* e = static_cast <QMouSeEvent*> (evento); Qpoint pos = e-> pos (); int x = tabelaft.x (); int x = tableft.x ()+tabidth; 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); } retornar QObject :: EventFilter (objeto, evento); }; }; #endif // myeventfilter_h Finalmente, vincule -se à principal função principal, para que todos os eventos possam ser capturados:
qapp-> InstalleventFilter (new MyEventFilter ());
Além disso, as informações de largura precisam ser atualizadas quando a página da guia é alterada (a altura não é necessária para ser atualizada):
void mainwindow :: updatebar () {tabindex_current = tabwidget-> currentIndex (); tabindex_old = tabindex_current; Qtabbar *bar = tabwidget-> getBar (); if (bar-> size (). width ()>) tabwidth = bar-> size (). width (); } O acima exposto é o método de clique duas vezes o fechamento da tag Qtabwidget introduzida a você pelo editor (recomendado). Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!