qt 实现控件移动·
时间: 2023-08-31 08:02:25 浏览: 175
可以移动的控件源码
在Qt中,我们可以使用QMouseEvent和QEvent事件来实现控件的移动。
首先,我们需要创建一个自定义的控件类,并重写它的鼠标事件函数。具体如下:
```cpp
class MyWidget : public QWidget
{
public:
MyWidget(QWidget* parent = nullptr)
: QWidget(parent)
{
}
protected:
void mousePressEvent(QMouseEvent* event) override
{
if (event->button() == Qt::LeftButton) {
// 记录鼠标按下时的位置
m_lastPos = event->globalPos() - this->pos();
}
}
void mouseMoveEvent(QMouseEvent* event) override
{
if (event->buttons() & Qt::LeftButton) {
// 计算移动后的位置
QPoint newPos = event->globalPos() - m_lastPos;
// 设置控件位置
this->move(newPos);
}
}
private:
QPoint m_lastPos;
};
```
在上述代码中,鼠标按下时记录了鼠标相对于控件的位置,然后在鼠标移动事件中计算鼠标的全局位置,并通过设置控件位置实现了控件的移动。
接下来,我们可以在主窗口中使用这个自定义的控件类。例如:
```cpp
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MyWidget* widget = new MyWidget;
widget->resize(200, 200);
widget->setStyleSheet("background-color: red;");
widget->show();
return app.exec();
}
```
上述代码创建了一个大小为200x200的红色控件,当鼠标按下并拖动时,控件会跟随鼠标移动。
阅读全文