Hy đó,Qt - Di chuyển cửa sổ không khung (chậm sơn lại?)
Tôi mới vào Qt và tôi đã cố gắng tạo cửa sổ Frameless, có thể kéo được. Vấn đề là, nếu tôi di chuyển cửa sổ .. có hàng ngàn (nó? Xin lỗi, không biết làm thế nào để mô tả nó bằng tiếng Anh) cho đến khi tôi dừng lại. Có cách nào để sửa lỗi này hay tôi đang nghĩ sai?
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();
}
Greetings, Alex
Tôi đã thử mã mẫu của bạn với Qt 4.5.1 trên Winwods Vista và nó hoạt động tốt, bạn có thể mô tả chính xác hơn những gì sai (hàng ngàn cái gì không?). – gregseth
Tôi cho rằng "hàng nghìn" là một phần lớn các đoạn cửa sổ mà trình quản lý cửa sổ có thể bỏ lại phía sau nếu nó không làm mới nền đúng cách khi cửa sổ được di chuyển. Đối với tôi, nó có vẻ giống như một vấn đề với trình quản lý cửa sổ, hoặc có thể trên một thiết bị nhúng đang chạy trên một tải CPU cao. –
Đây chính xác là những gì tôi muốn nói. Nhưng nó chỉ xảy ra nếu tôi đang kéo cửa sổ không khung trên ứng dụng anoter như Firefox. Trên máy tính để bàn, đó là hành vi bình thường. Tải CPU là bình thường, cũng GPU <5% – Alex