如何解决如何为“QGraphicsScene”图形场景中的“Item”对象生成触摸事件?
我有一个图形场景“QGraphicsScene”,我在上面绘制了控件的状态(可以这么说,视觉控件),为了清楚起见,我附上了一张图片。单个控件的状态由一个带边框的框表示(注意带有数字“000”的框)。框架的颜色和正方形的内部部分不同。根据配色方案,您可以确定控件的状态。控制元件可以理解为继电器。关闭打开。或者温度传感器。在我绘制的场景中,方格很小,爬到“帮助”中查看某个控件的配色方案是什么意思不是很方便。因此,我想添加调用描述控件状态的弹出窗口的功能。但我不知道该怎么做。所以请教有识之士。我会直接说电脑是刹车在臂芯上。 Qt 4.7.8。
正如我看到的解决方案,但我不知道如何在 qt 中做到这一点:
1.有必要生成一个事件(调用一个方法,一个向量),我将在其中接收有关用户想要了解哪些方块的信息,诸如“事件(矩形数字)”之类的东西可能会出错。通过数字 rect 我将引用包含有关对象信息的数据结构。 2. 在屏幕中央绘制一个弹出窗口,其中包含有关对象的信息。 3. 单击“确定”按钮(“确定”按钮在弹出窗口中)关闭弹出窗口。
我认为仅此而已。方块的元素不能在屏幕上移动。
做了什么:在构造函数 main .c 中
graphicsScene = new QGraphicsScene(this);
for (int i = 0; i < 256; i++) {
statebalanser = new StateBalanser(i);
statebalanser->setPos((i * 54) % 540,(i / 10) * 42);
graphicsScene->addItem(statebalanser);
}
graphicsScene->setSceneRect(-4,-4,544,1104);
ui->graphicsView->setAlignment(Qt::AlignLeft);
ui->graphicsView->setInteractive(true);
ui->graphicsView->setResizeAnchor(QGraphicsView::NoAnchor);
ui->graphicsView->setTransformationAnchor(QGraphicsView::NoAnchor);
ui->graphicsView->setViewportUpdateMode(QGraphicsView::SmartViewportUpdate);
ui->graphicsView->setoptimizationFlag(QGraphicsView::DontSavePainterState,true);
ui->graphicsView->setCacheMode(QGraphicsView::CacheBackground);
ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBaralwaysOff);
ui->graphicsView->setFrameShape(qframe::NoFrame);
ui->graphicsView->setScene(graphicsScene);
StateBalanser.h
#ifndef STATEBALANSER_H
#define STATEBALANSER_H
#include <QGraphicsRectItem>
#include <QPainter>
#include <memorymap.h>
#include <QFont>
#include <QFontDatabase>
#include <QDateTime>
#include <QDebug>
class StateBalanser : public QGraphicsRectItem
{
public:
StateBalanser(int num);
public:
void paint(QPainter *painter,const qstyleOptionGraphicsItem *option,QWidget *widget);
void StateBalance();
void setColorState(unsigned char value_1,unsigned char value_2);
void setColorText(QColor text);
void setFontText(QFont fontText);
private:
int number;
private:
QPainterPath _painterPath;
QRectF _intersect;
QColor _fillColorState;
QColor _fillColorModeWork;
QColor _fillColorText;
QFont _fontText;
QString numberRect;
public:
QRectF boundingRect() const;
QPainterPath shape() const;
};
#endif // STATEBALANSER_H
StateBalanser.c
#include "statebalanser.h"
StateBalanser::StateBalanser(int num) :
number(num)
{
setColorState(disabledBalancer,Statedisabled);
StateBalanser::StateBalance();
StateBalanser::setColorText(Qt::black);
int id = QFontDatabase::addApplicationFont("/usr/share/fonts/liquidcr.ttf");
QFont font = QFont(QFontDatabase::applicationFontFamilies(id).first());
font.setPointSize(12);
StateBalanser::setFontText(font);
_painterPath = shape();
numberRect = QString().sprintf("%03d",number + 1);
}
void StateBalanser::paint(QPainter *painter,QWidget *widget)
{
painter->fillRect(boundingRect(),_fillColorModeWork);
painter->fillRect(_intersect,_fillColorState);
painter->drawPath(_painterPath);
painter->setFont(_fontText);
painter->drawText(boundingRect(),Qt::AlignCenter,numberRect );
}
void StateBalanser::StateBalance()
{
_intersect = boundingRect().intersected(QRectF(3,3,44,32));
}
void StateBalanser::setColorState(unsigned char value_1,unsigned char value_2)
{
switch(value_2)
{
case StopBalancer : _fillColorModeWork = QColor("#000000") ;
break;
case ChargeBalancer : _fillColorModeWork = QColor("#0000ff") ;
break;
case dischargeBalancer : _fillColorModeWork = QColor("#ff0000") ;
break;
case EsrBalancer : _fillColorModeWork = QColor("#32CD32") ;
break;
case disconnectBalancer : _fillColorModeWork = QColor("#000000") ;
break;
case disabledBalancer : _fillColorModeWork = QColor("#ffffff") ;
break;
default : _fillColorModeWork = QColor("#ffffff") ;
break;
}
switch(value_1)
{
case StateGood : _fillColorState = QColor("#99FF99") ;
break;
case StateFiftyFifty: _fillColorState = QColor("#FFFF66") ;
break;
case StateFault : _fillColorState = QColor("#FF9999") ;
break;
case Statedisconnect: _fillColorState = QColor("#999999") ;
break;
case StateMeasurement: _fillColorState = QColor("#a2c8d6") ;
break;
case Statedisabled: _fillColorState = QColor("#ffffff") ;
break;
default : _fillColorState = QColor("#ffffff") ;
break;
}
}
void StateBalanser::setColorText(QColor text)
{
_fillColorText = QColor(text);
}
void StateBalanser::setFontText(QFont fontText)
{
_fontText = fontText;
}
QRectF StateBalanser::boundingRect() const
{
return QRectF(0,49,37);
}
QPainterPath StateBalanser::shape() const
{
QPainterPath path;
path.addRect(boundingRect());
return path;
}
这是窗口的视图:
图形场景视图。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。