شما امدی تو هدر تعریف کردی تو قسمت کلاس
QGraphicsEllipseItem *el;
خوب دیگه لازم نیست تو فایل cpp بزاری
QGraphicsEllipseItem *el = new QGraphicsEllipseItem;
باید بزاری
el = new QGraphicsEllipseItem;
چون اگر اون جوری تعریف کنی میاد یک e1 دیگه میسازه واسه همین اون e1 که تو SLOT استفاده می کنی اون e1 ای که فکر می کنی هست نیست !
http://en.wikipedia.org/wiki/Variable_shadowing
این عکس هم به خاطره این نمیاد که فرمتشو نزاشتی .jpg یا حالا هرچی
کد شماا بصورت درست همین جوری که میبینی ارور ربطی به SLOT نداره
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QPushButton>
#include <QGraphicsEllipseItem>
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QGraphicsEllipseItem *el;
QGraphicsRectItem *rec ;
private slots :
void btnclick();
};
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsRectItem>
#include <QPushButton>
#include <QPixmap>
#include <QMessageBox>
#include <QGraphicsEllipseItem>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QGraphicsView * view = new QGraphicsView;
QGraphicsScene *scene = new QGraphicsScene;
el = new QGraphicsEllipseItem;
setCentralWidget(view);
view->setScene(scene);
// view.setScene(scene);
QPushButton *btn = new QPushButton(view);
connect(btn,SIGNAL(clicked()),
this , SLOT(btnclick()));
view->setRenderHint(QPainter::Antialiasing);
scene->addPixmap(QPixmap("C:\Users\Novin Pendar\Desktop\icon.jpg"));
rec = scene->addRect(10,10,100,100);
rec->setPos(200,200);
rec->setFlag(QGraphicsItem::ItemIsMovable , true);
rec->setFlag(QGraphicsItem::ItemIsSelectable);
rec->setFlag(QGraphicsItem::ItemClipsChildrenToShape );
//rec->setFlag(QGraphicsItem::ItemClipsToShape,true);
scene->setSceneRect(0,0,500,500);
el = scene->addEllipse(100,100,20,10);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::btnclick()
{
if( rec->collidesWithItem(el))
{
QMessageBox::information(this,"collodes","warning !");
}
}