[Qt-interest] Adding widget to QGraphicsView

John McClurkin jwm at nei.nih.gov
Wed Jul 22 18:28:40 CEST 2009


Yuvaraj R wrote:
>  
> I declared the the Qlabel ,QlineEdit as private in Class..

Do you mean that your class has private members named
	QLabel *label;
	QLineEdit *line:
?

>  
> if use the label apart from the constrcutor application crashing..

Is the sample code below your constructor? If so, this may be the 
problem. Your statements
	Qlabel *label = new QLabel();
and
	QLineEdit *line = new QLineEdit();
create local pointer variables in the constructor. These statements will 
not initialize private member variables.

>  
> *sample code.*
> ui->setupUi(this);
> 
> this->setWindowFlags(Qt::WindowSystemMenuHint);
> 
> QGraphicsScene *scene= new QGraphicsScene();
> 
> QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget;
> 
> QLabel *label = new QLabel();
> 
> label->setText("Username");
> 
> QFont font;
> 
> font.setPointSize(9);
> 
> label->setFont(font);
> 
> proxy = scene->addWidget(label);
> 
> proxy->setPos(50,130);
> 
> QLineEdit *line = new QLineEdit();
> 
> proxy = scene->addWidget(line);
> 
> proxy->setPos(120,130);
> 
> proxy->setMaximumWidth(120);
> 
> ui->graphicsView->setScene(scene);
> 
> QLabel *label1 = new QLabel();
> 
> label1->setText("PassWord");
> 
> label1->setFont(font);
> 
> proxy = scene->addWidget(label1);
> 
> proxy->setPos(50,170);
> 
> QLineEdit *line1 = new QLineEdit();
> 
> proxy = scene->addWidget(line1);
> 
> proxy->setPos(120,170);
> 
> proxy->setMaximumWidth(120);
> 
> QPushButton *button = new QPushButton();
> 
> button->setText("Login");
> 
> button->setMaximumWidth(60);
> 
> proxy = scene->addWidget(button);
> 
> proxy->setPos( 150, 220);
> 
> QLabel *label3 = new QLabel();
> 
> label3->setText("Welcome to MaxxTel");
> 
> font.Bold;
> 
> font.setPointSize(13);
> 
> label3->setFont(font);
> 
> proxy = scene->addWidget(label3);
> 
> proxy->setPos(100,50);
> 
> ui->graphicsView->setScene(scene);
> 
> QObject::connect(button,SIGNAL(clicked()),this,SLOT(show_message1()));
> 
> }
> 
> Widget::~Widget()
> 
> {
> 
> delete ui;
> 
> }
> 
> void Widget::show_message1()
> 
> {
> 
> QMessageBox::information(0,"",QString("yuvaraj"));
> 
> label->hide();
> 
> label1->hide();
> 
> QMessageBox::information(0,"2",QString("yuvaraj"));
> 
> label3->hide();
> 
> line->hide();
> 
> line1->hide();
> 
> button->hide();
> 
> QMovie *movie = new QMovie("../Icons/loader.gif");
> 
> QLabel *label4 = new QLabel;
> 
> label4->setMovie(movie);
> 
> QMessageBox::information(0,"3",QString("yuvaraj"));
> 
> movie->start();
> 
> QMessageBox::information(0,"1",QString("yuvaraj"));
> 
> label4->setGeometry(50,50,200,200);
> 
> proxy = scene->addWidget(label4);
> 
> ui->graphicsView->setScene(scene);
> 
> QMessageBox::information(0,"5",QString("yuvaraj"));
> 
> }
> 
> i used to put current class as parent of label ,but align ment was not 
> proper and when i am clicking the button..nothing happened..
>  
>  
> Thanks
>  
> Yuvaraj R
> 
> On Wed, Jul 22, 2009 at 7:53 PM, Srdjan Todorovic 
> <todorovic.s at googlemail.com <mailto:todorovic.s at googlemail.com>> wrote:
> 
>     Hi,
> 
>     On 22/07/2009, John McClurkin <jwm at nei.nih.gov
>     <mailto:jwm at nei.nih.gov>> wrote:
>      > The compiler went to Qlineedit.h 268? I assume you mean that the
>      > debugger went to qlineedit.h 268. If this is a stack trace, then this
>      > line just the last entry of the trace. Since this is a Qt src file, I
>      > double strongly that the error is here.
> 
>     The error is probably not there, but that's where it's manifested.
> 
>     eg.
> 
>      char buf[4];
>      QWidget yay;
> 
>      ::memset(&buff, 0, 60);
> 
>      yay.show();  // bang!
> 
>     The debugger will probably catch yay's members as the cause of the
>     crash (eg you set an internal pointer to NULL or some other invalid
>     value).
>     But it was actually the size param to memset() that is the error..
>     (I'm sure you all know this ;) )
> 
>      > The error was triggered by your
>      > code. You need to examine the stack trace to find the entries that
>      > identify your code. That said, I would guess that, since the debugger
>      > stops in qlineedit.h, you are using an invalid pointer to a QLineEdit
>      > widget.
> 
>     Let me also add "use the debugger and get a stack trace".
> 
>     All you need to do is:
>      gdb ./myprogram
>      run
>      bt
> 
>     So simple, yet so important.
> 
>     Good luck,
>     Srdjan
>     _______________________________________________
>     Qt-interest mailing list
>     Qt-interest at trolltech.com <mailto:Qt-interest at trolltech.com>
>     http://lists.trolltech.com/mailman/listinfo/qt-interest
> 
> 



More information about the Qt-interest-old mailing list