【发布时间】:2015-11-11 21:25:30
【问题描述】:
通常当我想影响 ui 上的对象时,我会在 mainwindow.cpp 中使用它:
ui->nameOfObject.doStuff();
但是现在我希望在触发我的类“Ball”的对象的悬停事件时更改 ui 上的对象,但是在文档中挖掘了几个小时后,我还没有找到从 QGraphicsItem 到的接口用户界面。 将数据从我的班级获取到 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);
}
球.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);
球.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'
}
但是当我尝试构建它时,我会从编译器中收到错误消息。我做错了什么?
【问题讨论】: