从继承自QGraphicsItem的类到ui上的对象的连接

时间:2015-08-18 19:20:02

标签: c++ qt interface

通常当我想影响ui上的对象时,我会在mainwindow.cpp中使用它:

ui->nameOfObject.doStuff(); 

但是现在我希望ui上的一个对象能够在我的班级对象的悬停事件发生时改变" Ball"触发了,但经过几个小时的挖掘文档后,我还没有找到从QGraphicsItem到ui的界面。 将数据从我的班级带到ui的最佳方法是什么?

所以我尝试按照我的代码现在的答案做的建议:

mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    scene = new QGraphicsScene (this);
    scene->setItemIndexMethod(QGraphicsScene::NoIndex);

ui->graphicsView->setScene (scene);
}

void MainWindow::on_createNewBallButton_clicked()
{

    Ball *newBall = new Ball(newBallAngle, newBallRadius, newBallMass, newBallSpeed, newBallxCoordinate, newBallyCoordinate, ui);
    scene->addItem(newBall);
}

Ball.h

    public:
 Ball(double phi, double r, double m, double v, double x, double y, Ui::MainWindow *uivalue);


Ui::MainWindow *ui;
protected:
void hoverEnterEvent(QGraphicsSceneHoverEvent *event);

Ball.cpp

Ball::Ball(double phi, double r, double m, double v, double x, double y, Ui::MainWindow *uivalue )
{
    setAngle(phi);
    speed = v;
    mass = m;
    hasCollided = 0;
    radius = r;
    setPos(x, y);
    ui = uivalue;

}

void Ball::hoverEnterEvent(QGraphicsSceneHoverEvent * event)
{
   double outSpeed = this->getV();
   double outAngle = this->getPhi();
   double outMass = this->getM();
   double outRadius = this->getR();
   double outxCoordinate = this->center().x();
   double outyCoordinate = this->center().y();
   ui->radiusOutput.setText(number(outRadius)); //Compiler: invalid use of incomplete type 'class Ui::MainWindow'

}

但是当我尝试构建这个时,我从编译器中得到了错误消息。我做错了什么?

1 个答案:

答案 0 :(得分:0)

在大多数情况下,您应该使用信号/插槽在UI和其他类之间进行通信。但是在这里你处理的QGraphicsItem不是QObject子类,所以你不能使用signal / slot。当然,您可以使用QGraphicsObject,但这会降低性能。因此解决问题的一种方法是将指针存储到UI对象并使用它进行操作。为此对象提供getter / setter。

 void YourItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
 {
     if(pointer)
         pointer->setText("Ball!");
 }