gpt4 book ai didi

Qt - move 无框窗口(重绘缓慢?)

转载 作者:行者123 更新时间:2023-12-04 10:21:08 24 4
gpt4 key购买 nike

你好,

我是 Qt 的新手,我尝试创建一个可拖动的无框架窗口。问题是,如果我 move 窗口......有成千上万(它?抱歉,不知道如何用英语描述它)直到我停下来。
有没有办法解决这个问题,还是我想错了?

我的窗口

#include <QMainWindow>
#include <QLabel>
#include <QPushButton>
#include <QMouseEvent>

class MyWindow : public QMainWindow {
Q_OBJECT
private:
QLabel *label_title,*label_quit;
QPushButton *bn_exit;
QPixmap *pixmap;
QPoint m_dragPosition;

public:
MyWindow(QMainWindow *parent = 0, Qt::WindowFlags flags = 0);
protected:
void paintEvent(QPaintEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mousePressEvent(QMouseEvent *event);
};

我的窗口.cpp
#include "MyWindow.h"
#include <QApplication>
#include <QPainter>
#include <QLabel>

MyWindow::MyWindow(QMainWindow *parent, Qt::WindowFlags flags) : QMainWindow(parent,flags) {

resize(1024,576);
setWindowTitle("Versuch1");

//Titel
label_title = new QLabel("irgendwas",this);
label_title->setGeometry(10,10,500,40);
label_title->setStyleSheet("font-family: Arial; letter-spacing: 4px;font-weight:bold; color : white;font-size: 30px");

//Exit-Button
bn_exit = new QPushButton("[Exit]",this);
bn_exit->setGeometry(975,10,40,20);
bn_exit->setStyleSheet("QPushButton {font-family: Verdana; font-size:15px; top:0px; border: none; background-color:#101010; color:white} QPushButton:hover {color: red }");
connect(bn_exit,SIGNAL(clicked()),qApp,SLOT(quit()));
}


void MyWindow::paintEvent(QPaintEvent *event) // Painter
{
QPainter painter(this);
painter.setPen(Qt::NoPen); // deactivate Border

painter.setBrush(QBrush("#101010")); // black title and footer
painter.drawRect(0, 0, 1024, 60);

painter.setBrush(QBrush("#101010"));
painter.drawRect(0, 516, 1024, 576);
}
void MyWindow::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton) {
move(event->globalPos() - m_dragPosition);
event->accept();
}
}
void MyWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_dragPosition = event->globalPos() - frameGeometry().topLeft();
event->accept();
}
}

主程序
#include <QApplication>
#include "MyWindow.h"

int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MyWindow* window = new MyWindow(0, Qt::FramelessWindowHint);
window->show();
return app.exec();
}

你好,
亚历克斯

最佳答案

您可能想尝试在 protected 方法中调用基类方法。例如:

void MyWindow::paintEvent(QPaintEvent *event) // Painter
{
QWidget::paintEvent(event);
...
}
void MyWindow::mouseMoveEvent(QMouseEvent *event)
{
QWidget::moveMouseEvent(event);
...
}

关于Qt - move 无框窗口(重绘缓慢?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2372651/

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