Hy orada,Qt - (? Yavaş rötuş) Çerçevesiz pencereyi taşıma
Ben Qt yeniyim ve ben dragable bir Çerçevesiz pencere, yaratmaya çalışmışlardır. Sorun şu ki, eğer pencereyi hareket ettirirsem .. duracak olana kadar (üzgünüm, ingilizceyi nasıl tarif edeceğimi bilmiyorum) binlerce var. Bunu düzeltmenin bir yolu var mı, yoksa yanlış yolu mu düşünüyorsun?
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();
}
Selamlar, Alex
Sen b çağırarak denemek isteyebilirsiniz
Örnek kodunuzu Winwods Vista'da Qt 4.5.1 ile denedim ve iyi çalışıyor, daha neyin yanlış olduğunu açıklayabilir misiniz (binlerce ne?). – gregseth
"Binlerce tane" pencere parçalarının büyük bir bölümünü ifade ediyor, pencere yöneticisi, arka plan pencereyi hareket ettirildiğinde düzgün bir şekilde yenilenmiyorsa, arkada bırakabiliyor. Bana göre, pencere yöneticisi veya büyük bir CPU yükü üzerinde çalışan gömülü bir aygıt üzerinde bir sorun gibi geliyor. –
Bu tam olarak ne demek istediğimi. Ama sadece, çerçevesiz pencereyi Firefox gibi bir anoter uygulaması üzerinden çekiyorsam olur. Masaüstünde normal bir davranış. CPU yükü normaldir, ayrıca GPU <% 5 – Alex