您可以使用以下代码将Qt窗口设置为无边框,并支持鼠标事件和拖动:
#include <QtWidgets>
class CustomWindow : public QWidget
{
public:
CustomWindow(QWidget *parent = nullptr) : QWidget(parent)
{
setWindowFlags(Qt::FramelessWindowHint); // 设置无边框
QGridLayout *layout = new QGridLayout(this);
QLabel *label = new QLabel("Drag me!", this);
label->setAlignment(Qt::AlignCenter);
layout->addWidget(label, 0, 0, Qt::AlignCenter);
}
protected:
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton)
{
m_dragging = true;
m_lastPos = event->globalPos() - pos();
event->accept();
}
}
void mouseMoveEvent(QMouseEvent *event) override
{
if (m_dragging && event->buttons() & Qt::LeftButton)
{
move(event->globalPos() - m_lastPos);
event->accept();
}
}
void mouseReleaseEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton)
{
m_dragging = false;
event->accept();
}
}
private:
bool m_dragging;
QPoint m_lastPos;
};
int main(int argc, char **argv)
{
QApplication app(argc, argv);
CustomWindow window;
window.resize(200, 200);
window.show();
return app.exec();
}
在这个示例中,我们创建了一个自定义的QWidget子类CustomWindow,并在构造函数中设置了无边框。然后,我们添加了一个QLabel到布局中,并实现了鼠标事件来支持拖动。最后,我们创建了一个应用程序对象并显示窗口。
注意:如果您使用的是Qt 5.15或更高版本,则可以使用新的WindowFlag Qt::WindowType_Mask替换setWindowFlags(Qt::FramelessWindowHint)。