我有一組矢量點,每次單擊我的視窗都會將對添加到矢量中。我想在我的點上添加一個不可見的半徑,這將幫助我檢測是否點擊了一個點。該點的大小基本上為 1 像素,因此用戶無法直接單擊它。我怎樣才能做到這一點?我需要為此使用任何數學公式嗎?
std::vector<QPoint> pointSet;
void MyWindow::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
x0 = event->x();
y0 = event->y();
QPoint data;
data.setX(x0);
data.setY(y0);
pointSet.push_back(data);
}
//I want to be able to do it like below
if(event->button() == Qt::RightButton)
{
//if(pointClicked) { cout << "point with x,y clicked"; }
}
update();
}
uj5u.com熱心網友回復:
如果我正確理解你的問題,你只需要遍歷你的向量并檢查是否有任何保存的點在點擊點的范圍內。所以這樣的事情應該有效:
if (event->button() == Qt::RightButton)
{
int radius = <something>
QRectF range(event->x() - radius, event->y() - radius, radius * 2, radius * 2);
for (auto &p in pointSet)
{
if (range.contains(p))
{
cout << "point with" << p.x() << "," << p.y() << "clicked";
break;
}
}
}
uj5u.com熱心網友回復:
您可以創建視窗大小的螢屏外位圖。每當您向向量中添加一個點時,您都??可以繪制一個顏色等于向量中該點索引的實心圓。然后在任何滑鼠點擊事件上,您可以獲得點擊點的顏色并獲得您的矢量元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/443985.html
上一篇:如何在VSCode中為簡單的Java專案(即沒有任何構建工具的非托管檔案夾)添加Maven依賴項?
下一篇:QComboBox在Qt.UIEffect.UI_AnimateCombo設定為False時更改樣式表時出現意外行為
