PDA

View Full Version : مشکل در connect



A.iman
دوشنبه 24 تیر 1392, 18:09 عصر
سلام دوستان .
من یه برنامه ی ساده نوشتم که اگه روی کلید کلیک کنیم برخورد لوزی و مستطیل رو اعلام میکنه ... ولی نمیدونم مشکل در connect هست یا جای دیگه ای ؟!:گریه::ناراحت:
و در ضمن یه ایکون هم بهش اضافه میکنم ولی نمیاره ! error اش رو هم گذاشت م ...
کلافه ام کرده این connect و slot و signal !!! :گریه::گریه::گریه::گریه::گریه: :افسرده::عصبانی++::عصبانی:


#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;
QGraphicsEllipseItem *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"));
QGraphicsRectItem *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 !");
}
}


#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();
};

omidshaman
دوشنبه 24 تیر 1392, 21:42 عصر
شما امدی تو هدر تعریف کردی تو قسمت کلاس

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 !");
}
}

A.iman
دوشنبه 24 تیر 1392, 22:04 عصر
ممنون که مثل همیشه با دقت و حوصله جواب دادی ....