2014-11-27 14 views
6

Tôi muốn có thể hiển thị Chú giải công cụ cho QMenu mục (QAction s). Điều tốt nhất tôi đã đạt được là để kết nối các tín hiệu dao động của QAction đến một chương trình QTooltip:QTooltip cho QActions trong QMenu

connect(action, &QAction::hovered, [=]{ 
    QToolTip::showText(QCursor::pos(), text, this); 
}); 

Vấn đề là đôi khi các chương trình sẽ xác định vị trí các tooltip bên dưới menu, đặc biệt khi thay đổi thực đơn.

Có cách nào để buộc chú giải công cụ hiển thị trên đầu trang không?

Trả lời

5

Bạn có thể phân lớp QMenu và reimplementing QMenu::event() để đánh chặn các sự kiện QEvent::ToolTip và gọi QToolTip::showText để thiết lập các tooltip cho các hành động tích cực:

#include <QtGui> 

class Menu : public QMenu 
{ 
    Q_OBJECT 
public: 
    Menu(){} 
    bool event (QEvent * e) 
    { 
     const QHelpEvent *helpEvent = static_cast <QHelpEvent *>(e); 
     if (helpEvent->type() == QEvent::ToolTip && activeAction() != 0) 
     { 
       QToolTip::showText(helpEvent->globalPos(), activeAction()->toolTip()); 
     } else 
     { 
       QToolTip::hideText(); 
     } 
     return QMenu::event(e); 
    } 
}; 

Bây giờ bạn có thể sử dụng menu tùy chỉnh của bạn như:

Menu *menu = new Menu(); 
menu->setTitle("Test menu"); 
menuBar()->addMenu(menu); 

QAction *action1 = menu->addAction("First"); 
action1->setToolTip("First action"); 

QAction *action2 = menu->addAction("Second"); 
action2->setToolTip("Second action"); 
+0

Đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn. – Noel

Các vấn đề liên quan