QTをARMとして使用し、QT4のQtabwidgetのネイティブクローズボタン(x)が小さすぎて、タッチパッドで押すのは難しいことを発見しました。そこで、ブラウザに似たダブルクリック機能を考えました。以前にC#リソースマネージャーに取り組んでいたので、DoubleClickを直接バインドできると思っていましたが、検索した後、対応するスロットが見つかりませんでした。その結果、QWidgetで信号をキャッチしました。これは、Qtabwidgetタグのないマウスイベントでした。それはトリックです!その後、私はさまざまな質問をオンラインで検索し、さまざまな質問を見つけました。それぞれが正確に答えました...最後に、それについて考えた後、それは本当にうまくいかなかったので、私はHockを模倣するために最も愚かな方法を使用しました!
そのため、Qtabwidgetをリロードしました(Tabbar()が保護されているため、詐欺です!)。タグを取得できます。
クラスタブ:public qtabwidget {q_object public:tab(qwidget *parent =); qtabbar* getBar();保護:void mousepressevent(qmousevent *event); };次に、イベントフィルターを実装するときに、最初にイベントがダブルクリックイベントであるかどうかを判断し、次にラベル位置であるかどうかを判断します。その場合、現在のタブページを削除します。ダブルクリックイベントでクリックをトリガーする必要があるため、つまり、タブページが選択されているため、他のタブページをダブルクリックすることによって引き起こされるインデックス変更の問題を考慮する必要はありません。
#ifndef myeventfilter_h #define myeventfilter_h #include <qmainwindow> #include <qmouseevent> #include "tab.h" extern int tabindex_current; extern int tabindex_old; extern tab *tabwidget; extern 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*>(event); 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(object、event); }; }; #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のウェブサイトへのご支援ありがとうございます!