Qt使用QPainter在子控件上繪圖

Qt使用QPainter在子控件上繪圖

因爲Qt存在事件過濾機制,事件過濾器會將子控件上的繪圖事件過濾,因此無法在子控件上使用QPainter進行繪圖

如果需要在子控件上使用QPainter,同樣需要事件過濾器

事件過濾器

事件過濾器與其他部件不同,它不是一個類,只是由兩個函數組成的一種操作
用來完成一個部件對其他部件的事件監視,這兩個函數分別是installEventFilter()和eventFilter(QObject *obj, QEvent *ev),都是QObject類中的函數

使用步驟:
  • 安裝事件過濾器: ui->paint_widget(子控件名,可更換爲需要使用的控件)->installEventFilter(this);
  • 實現在過濾器中指定的操作

事件過濾器的實現(具體代碼):

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if(watched == ui->paint_widget && event->type() == QEvent::Paint)
    {
        showPaint(); //響應函數
    }
    return QWidget::eventFilter(watched,event);
}

//實現響應函數
void MainWindow::showPaint()
{
    QPainter painter(ui->paint_widget);
    painter.setPen(Qt::gray);
    painter.setBrush(Qt::green);
    painter.drawRect(10,10,200,200);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章