Re: [問題] Qt的滑鼠座標顯示
※ 引述《goodwise (加油!!變強)》之銘言:
: 小弟用QT開發一個程式
: 裡面有個繪圖的QGraphicsScene
: 用QGraphicsView建置在一個視窗QMainWindow中
: 想在QMainWindow另一個元件狀態列QStatusBar用showMessage印出座標
: 在QGraphicsScene下有個mouseMoveEvent(QGraphicsSceneMouseMoveEvent *e)
: 滑鼠在QGraphicsView的範圍裡按下滑鼠時
: 可以在裡面用e->scenePos()去獲得座標位置
: 現在問題來了 要更改QStatusBar的顯示值時是在QMainWindow下改
: 但是滑鼠的座標卻只有在QGraphicsScene裡才能取得
: 要怎麼把e->scenePos()傳給QStatusBar顯示呢???
: 找到的範例都是
: main本身就是一個QLabel直接去抓滑鼠
: 再setText本身顯示座標
: 但卻沒有其下的元件滑鼠事件傳到其他顯示元件去給值
: 感覺應該是很簡單的 可能是我腦袋轉不過來吧
試出來了 果然是蠻簡單的= =
之後試著在QMainWindow下建一個修改statusBar顯示值的slot
假設我在QGraphicsScene下按下滑鼠時要在QStatusBar上更新座標數值
宣告:
slots:void showPos(QGraphicsSceneMouseEvent *event);
實作:
void mainWindow::showPos(QGraphicsSceneMouseEvent *event)
{
QString msg;
msg.sprintf("(%d, %d)\n",
(int)event->scenePos().x(),(int)event->scenePos().y());
statusBar->showMessage(msg,0);
}
另外創一個class比如說叫paintScene繼承QGraphicsScene
在底下下建一個signal
宣告:
signals:void mousePressed(QGraphicsSceneMouseEvent *event);
實作:
在paintScene的mouseMoveEvent(QGraphicsSceneMouseEvent *event)下
釋出mousePressed信號
void paintScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
emit mousePressed(event);
...........
...........
}
最後在視窗QMainWindow下將signal和slot相連
connect(scene1, SIGNAL(mousePressed(QGraphicsSceneMouseEvent*)),
this, SLOT(showPos(QGraphicsSceneMouseEvent*)));
要注意參數*的傳遞 不然會有找不到信號的錯誤訊息
這裡算是亂試試出來的 因為小弟從Java轉過來
還不太有指標要不要加*的觀念
另外謝謝寄信給我的版友
算是自問自答拉= =
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.56.71.90
※ 編輯: goodwise 來自: 61.56.71.90 (01/25 17:07)
討論串 (同標題文章)