在Qt中,可以通过设置Qt::CustomizeWindowHint
属性来实现工具按钮的拖动效果。以下是一个示例代码:
#include <QApplication>
#include <QToolButton>
#include <QMouseEvent>
class DraggableToolButton : public QToolButton
{
public:
DraggableToolButton(QWidget* parent = nullptr) : QToolButton(parent)
{
setMouseTracking(true);
}
protected:
void mousePressEvent(QMouseEvent* event) override
{
if (event->button() == Qt::LeftButton)
{
// 记录鼠标点击时的位置和窗口位置差值
m_dragStartPosition = event->globalPos() - parentWidget()->pos();
}
QToolButton::mousePressEvent(event);
}
void mouseMoveEvent(QMouseEvent* event) override
{
if (event->buttons() & Qt::LeftButton)
{
// 移动窗口位置
parentWidget()->move(event->globalPos() - m_dragStartPosition);
}
QToolButton::mouseMoveEvent(event);
}
private:
QPoint m_dragStartPosition;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
DraggableToolButton toolButton(&window);
toolButton.setText("Draggable Tool Button");
window.show();
return app.exec();
}
这段代码创建了一个可拖动的工具按钮 DraggableToolButton
。通过重写鼠标事件函数 mousePressEvent
和 mouseMoveEvent
来实现拖动效果。当鼠标左键按下时,记录鼠标点击位置与窗口位置的差值,并在鼠标移动事件中更新窗口位置。
你可以根据自己的需求调整代码,并将 DraggableToolButton
替换为你自己的工具按钮类。
内容由零声教学AI助手提供,问题来源于学员提问