gpt4 book ai didi

qt - 如何在 QT 中创建可拖动(无边界和无标题)的顶级窗口

转载 作者:行者123 更新时间:2023-12-03 21:37:50 26 4
gpt4 key购买 nike

我很感激帮助在 Qt 中创建具有以下特征的顶级窗口。窗口必须是:

  • 无边框,无标题,位于桌面上所有其他窗口的顶部(简单)
  • 通过单击并拖动其中的任意位置可拖动(这是我需要帮助的)
  • 拖动时限制在桌面的上边框(相对容易)

  • 基本上,我试图将我们的 QT 应用程序折叠到桌面顶部边框上的顶级图标。

    最佳答案

    您将在以下位置找到第一部分的答案:Making a borderless window with for Qt , 以及 Select & moving Qwidget in the screen 中第二部分的答案.

    将两者结合起来并添加最后一部分很简单。

    你可以这样做:

    #include <QtGui>

    class W: public QWidget
    {
    Q_OBJECT

    设置一个带有几个按钮的无边框小部件来锁定/解锁和退出:
        public:
    W(QWidget *parent=0)
    : QWidget(parent, Qt::FramelessWindowHint), locked(false)
    {
    QPushButton *lock = new QPushButton("Lock");
    QPushButton *unlock = new QPushButton("Unlock");
    QPushButton *quit = new QPushButton("&Quit");

    connect(lock, SIGNAL(clicked()), this, SLOT(lock()));
    connect(unlock, SIGNAL(clicked()), this, SLOT(unlock()));
    connect(quit, SIGNAL(clicked()),
    QApplication::instance(), SLOT(quit()));

    QHBoxLayout *l = new QHBoxLayout;
    l->addWidget(lock);
    l->addWidget(unlock);
    l->addWidget(quit);
    setLayout(l);
    }

    public slots:
    void lock() {
    locked = true;
    move(x(), 0); // move window to the top of the screen
    }
    void unlock() { locked = false; }

    做鼠标处理:
        protected:
    void mousePressEvent(QMouseEvent *evt)
    {
    oldPos = evt->globalPos();
    }

    void mouseMoveEvent(QMouseEvent *evt)
    {
    const QPoint delta = evt->globalPos() - oldPos;
    if (locked)
    // if locked, ignore delta on y axis, stay at the top
    move(x()+delta.x(), y());
    else
    move(x()+delta.x(), y()+delta.y());
    oldPos = evt->globalPos();
    }

    private:
    bool locked;
    QPoint oldPos;
    };

    关于qt - 如何在 QT 中创建可拖动(无边界和无标题)的顶级窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18765918/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com