MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//開啟滑鼠移動監視
ui->centralWidget->setMouseTracking(true);
setMouseTracking(true); //這是激活整個表單的滑鼠追蹤
}
我按照網上的方法,發現并不能解決我的問題!我看到有個在博客中說到原因,如果使用UI(QT設計師)添加控制元件,那么在QMainWindow表單上會自動添加一個centralWidget層,而我們使用的是QMAinWindow的滑鼠移動監測事件,centralWidget將QMainWindow遮擋住了,所以滑鼠移動也無法進入mouseMoveEvent。他提出的解決方法是重寫控制元件的滑鼠事件。但是我的影像是直接經過paintEvent畫 的,應該怎么解決呢???求幫助
void PaintView::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
QImage image = QImage((uchar *)lpdib, lpbi->biWidth, lpbi->biHeight, QImage::Format_RGB32); //封裝QImage
QRect target(start_x, start_y, start_x+lpbi->biHeight, start_y+lpbi->biWidth);
QRect rect;
rect.setLeft(0);
rect.setRight(lpbi->biWidth);
rect.setTop(0);
rect.setBottom(lpbi->biHeight);
painter.drawImage(target, image, rect);
uj5u.com熱心網友回復:
題主:ui->centralWidget->setMouseTracking(true);
setMouseTracking(true); //這是激活整個表單的滑鼠追蹤
這兩句之后,你的mainWindow應該是能夠回應MouseMoveEvent的,但需要注意的是:mouseMoveEvent并不會觸發重繪!也就是說:
你在表單中移動滑鼠,paintEvent是沒有動作的。我認為你可能想實作的是在表單中移動滑鼠,然后跟隨滑鼠位置繪圖,那么,你現在的代碼就是沒有辦法起作用的。
uj5u.com熱心網友回復:
在你自己寫的類(基類必須是QWidget或其子類)重寫 void mousePressEvent(QMouseEvent *event)uj5u.com熱心網友回復:
setAttribute(Qt::WA_TransparentForMouseEvents, true);轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/153956.html
標籤:Qt
上一篇:微信自動回復圖片出錯
下一篇:usb device
