Пользовательский курсор мыши в C ++ с использованием QT Toolkit - постоянный мерцаниеC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Пользовательский курсор мыши в C ++ с использованием QT Toolkit - постоянный мерцание

Сообщение Anonymous »

Я реализовал пользовательский курсор в C ++ с использованием инструментария QT 5.15, как показано в этой небольшой тестовой программе, содержащей три класса:
Mainwindow, TestWidget и Box. мыша

Код: Выделить всё

#include 
#include 
#include 

class CTestWidget;
class CMainWindow;

class CBox : public QLabel
{
Q_OBJECT
public:
CBox(CTestWidget *parent);
void followMouse(void);
void mouseEntered(bool enter) { mouseEnteredFlag=enter;}
private:
bool mouseEnteredFlag;
};

class CTestWidget : public QLabel
{
Q_OBJECT
public:
CTestWidget(CMainWindow *parent);
protected:
void mouseMoveEvent(QMouseEvent *event);
void enterEvent(QEvent *event);
void leaveEvent(QEvent *event);
private:
CBox *box;
};

class CMainWindow : public QMainWindow
{
Q_OBJECT

public:
CMainWindow(QWidget *parent=0);
private:
CTestWidget *widget;
};
qtcursorexample.cpp

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 

#include "QtCursorExample.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

CMainWindow window;
window.show();
return app.exec();
}

CMainWindow::CMainWindow(QWidget *parent) : QMainWindow(parent)
{
widget=new CTestWidget(this);
setCentralWidget(widget);

resize(400,400);
move(100,100);
}

CTestWidget::CTestWidget(CMainWindow *parent) : QLabel(parent)
{
setMouseTracking(true);     //receive mouse events even when no buttons are pressed

box=new CBox(this);        //box attached to the cursor

setStyleSheet("background-color: yellow;");
setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
setText("THIS IS A TEST");

setMinimumSize(200,200);
setMaximumSize(200,200);
}

void CTestWidget::enterEvent(QEvent  *event)
{
box->show();
box->mouseEntered(true);

event->accept();
}

void CTestWidget::leaveEvent(QEvent  *event)
{
box->hide();
box->mouseEntered(false);

event->accept();
}

void CTestWidget::mouseMoveEvent(QMouseEvent  *event)
{
box->followMouse();

event->accept();
}

CBox::CBox(CTestWidget *parent) : QLabel(parent)
{
mouseEnteredFlag=false;

setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint|Qt::Tool);
setAttribute(Qt::WA_TranslucentBackground);      //see through

setFrameShape(QFrame::Box);
setAlignment(Qt::AlignCenter);

setLineWidth(2);

setMinimumSize(15,15);
setMaximumSize(15,15);
}

void CBox::followMouse(void)
{
if(mouseEnteredFlag==true)
{
QPoint globalCursorPos=QCursor::pos();
//centre the box on cursor position
globalCursorPos.setX(globalCursorPos.x()-10/2);
globalCursorPos.setY(globalCursorPos.y()-10/2);

move(globalCursorPos);
}
}
pro файл
TARGET = QtCursorExample
TEMPLATE = app
CONFIG += qt
QT += widgets

SOURCES = QtCursorExample.cpp
HEADERS = QtCursorExample.h
QMAKE_CXXFLAGS += -Wall
< /code>
Однако, Даже когда мышь не перемещается < /strong>, коробка постоянно перерыва Будьте очень ценят.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... nt-flicker
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»