Hy tamQt - (? Powolne repaint) Przeprowadzka Frameless okno
Jestem nowy na Qt i próbowałem stworzyć Frameless okno, które jest dragable. Problem polega na tym, że jeśli przesunę okno ... są tysiące (przepraszam, nie wiem, jak to opisać po angielsku), dopóki nie przestanę. Czy istnieje sposób, aby to naprawić, czy też myślę w niewłaściwy sposób?
MyWindow.h
#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);
};
MyWindow.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();
}
}
main.cpp
#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();
}
Pozdrowienia, Alex
Próbowałem twojego przykładowego kodu z Qt 4.5.1 na Winwods Vista i działa dobrze, czy mógłbyś dokładniej opisać, co jest nie tak (co tysięcy?). – gregseth
Zakładam, że "tysiące" odnosi się do dużej części fragmentów okna, które menedżer okien może zostawić, jeśli nie jest prawidłowo odświeżane w tle po przeniesieniu okna. Dla mnie brzmi to jak problem z menedżerem okien lub ewentualnie z osadzonym urządzeniem, które działa przy dużym obciążeniu procesora. –
To jest dokładnie to, co mam na myśli. Ale dzieje się tak tylko wtedy, gdy przeciągam okno bez ramek na inną aplikację, taką jak Firefox. Na komputerze jego normalne zachowanie. Obciążenie procesora jest normalne, także GPU <5% – Alex