2011-05-06 57 views
11

我希望能夠畫上我的應用程序窗口的頂部,這樣我可以標註所有與一些額外的診斷信息,類似Firefox中的CSS開發工具的部件疊加(如增加小部件類,樣式,高亮邊框等)。繪圖上的應用程序窗口的頂部

我可以走了widget樹,並提取相關信息,但問題是我怎麼能覆蓋所有與該信息的應用程序的窗口?

的一種方法是重寫我QMainWindow的漆事件,但是這對所有頂級窗口工作要做。有沒有其他方法可以在QDesktopWidget上繪畫?或者每個QWidget的繪畫方法都有鉤子?涉及子類QWidget本身的任何內容都不適用於標準小部件。

這從我剛纔的問題如下操作:

歡呼 山魈

編輯: 由於梅德我現在已經有一個非常簡單的方法,很容易擴展:

class DiagnosticStyle : public QWindowsVistaStyle 
{ 
Q_OBJECT 

public: 
    typedef QWindowsVistaStyle BaseStyle; 
    void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const; 
}; 


void DiagnosticStyle::drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const 
{ 
    BaseStyle::drawControl(element, option, painter, widget); 
    if (widget && painter) { 
     // draw a border around the widget 
     painter->setPen(QColor("red")); 
     painter->drawRect(widget->rect()); 

     // show the classname of the widget 
     QBrush translucentBrush(QColor(255,246,240, 100)); 
     painter->fillRect(widget->rect(), translucentBrush); 
     painter->setPen(QColor("darkblue")); 
     painter->drawText(widget->rect(), Qt::AlignLeft | Qt::AlignVCenter, widget->metaObject()->className()); 
    } 
} 

qApp->setStyle(new DiagnosticStyle()); 

回答

6

您可以創建基於QMotifStyle或其他自己的風格類...以及與他有關的信息的任何部件/控制作畫。

void MyStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option,QPainter *painter, const QWidget *widget) const 
{ 
    QStyle::State flags = option->state; 
    QRect  rect  = option->rect; 
    QPalette pal  = option->palette; 
    QBrush brush; 

    switch (element) 
    { 
     case PE_FrameTabWidget: 
     { 
      painter->save(); 

       // for example: draw anything on TabWidget 
       painter->drawPixmap(rect,centerPm,centerPm.rect()); 
      painter->restore(); 
     } 
     break; 
     default: 
     QMotifStyle::drawPrimitive(element, option, painter, widget); 
     break; 

    } 
} 
+0

這是一個好主意 - 這將是覆蓋更多有用的'將QStyle :: drawControl()'代替,因爲這使您可以訪問到窗口小部件? – 2011-05-06 13:35:36

+0

原來,這正是我所需要的 - 查看我編輯的帖子 – 2011-05-06 15:35:05

相關問題