Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Layering of widgets.please help me out



  • i have created 3 different layers of widgets on main window through drag and drop in ui and promoted all three widgets to different claases.now i have drawn 3 ellipses on three different widgets .there are 3 pushbuttons and i want on click of each button circles disappear respectively.
    i am sending my code.please help me.its urgent

                                   .h
    

    @
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QtGui/QMainWindow>

    namespace Ui
    {
    class MainWindow;
    }

    class MainWindow : public QMainWindow //class mainwindow
    {
    Q_OBJECT

    public:

    bool m_flag;
    bool m_increment;

    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    

    private:
    Ui::MainWindow *ui;

    private slots:

    private slots:
    void on_pushButton_3_clicked();
    //void on_pushButton_2_clicked();
    void on_pushButton_clicked();
    };

    class mywidget : public QWidget // class mywidget

    {
    Q_OBJECT

    public:

    mywidget(QWidget *parent = 0);

    void paintEvent(QPaintEvent *);

    public slots:

    private:
    Ui::MainWindow *ui;

    private slots:
    

    };

    class mywidget2 : public QWidget // class mywidget2

    {
    Q_OBJECT

    public:

    mywidget2(QWidget *parent = 0);

    void paintEvent(QPaintEvent *event);

    private:
    Ui::MainWindow *ui;

    private slots:
    

    };
    class mywidget3 : public QWidget // class mywidget2

    {
    Q_OBJECT

    public:

    mywidget3(QWidget *parent = 0);

    void paintEvent(QPaintEvent *eve);

    private:
    Ui::MainWindow *ui;

    private slots:
    

    };

    #endif // MAINWINDOW_H
    @

                                  .cpp
    

    @
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include<QPainter.h>

    int x=00;
    int y=00;
    int w=529;
    int h=569;

    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
    {

    m_flag=false;
    m_increment=false;

    ui->setupUi(this);
    

    //creating widget on ui

    //connect(ui->pushButton_3,SIGNAL(clicked()),wid,SLOT(button()));//connecting plot tfu button with widget

    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }
    mywidget::mywidget(QWidget *parent)
    : QWidget(parent)
    {
    }

    mywidget2::mywidget2(QWidget *parent)
    : QWidget(parent)
    {

    }

    mywidget3::mywidget3(QWidget *parent)
    : QWidget(parent)
    {

    }

    void mywidget ::paintEvent(QPaintEvent *)
    {

    // dimensions of plotting window
    int x=00;
    int y=00;
    int w=529;
    int h=569;

    QPainter painter(this);
    QRectF rect(x,y,w,h);
    painter.drawEllipse(rect);

    QPainter paint(this);
    paint.setViewport(x,y,w,h);
    paint.setWindow(-w/2,-h/2,w,h);
    paint.scale(1,-1);

    paint.setPen(QColor::QColor(255,128,0,255));
    paint.drawLine((w)/2,0,-(w)/2,0);
    paint.drawLine(0,-(h)/2,0,(h)/2);

    }

    void mywidget2 ::paintEvent(QPaintEvent *event)
    {
    int x=00;
    int y=00;
    int w=529;
    int h=569;
    QPainter painter(this);
    QRectF rect(130,130,w/2,h/2);

    painter.drawEllipse(rect);

    QPainter paint(this);
    paint.setViewport(x,y,w,h);
    paint.setWindow(-w/2,-h/2,w,h);
    paint.scale(1,-1);

    }

    void mywidget3 ::paintEvent(QPaintEvent *eve)
    {

    int x=00;
    int y=00;
    int w=529;
    int h=569;
    QPainter painter(this);

    QRectF rectangle(180,180,w/3,h/3);
    painter.drawEllipse(rectangle);

    QPainter paint(this);
    paint.setViewport(x,y,w,h);
    paint.setWindow(-w/2,-h/2,w,h);
    paint.scale(1,-1);

    }

    void MainWindow::on_pushButton_clicked()
    {
    if( m_flag=true)
    {
    ui->widget_3->enabled(false);

       }
    

    }

    void MainWindow::on_pushButton_3_clicked()
    {
    if (m_flag=true)
    {

    ui->widget_2->enabled(false);
    }
    

    }
    @

    [[Added code tags, Tobias]]


  • Moderators

    first thing to do: USE CODE TAGS!



  • ok.i will be sure next time tu use code tags.as i have just recently joined this group so was not aware of this.
    thanx


  • Moderators

    in the slots instead of calling enabled() call:
    @
    ui->widget_2->setVisible( ! ui->widget_2->isVisible() ); //this will toggle visibility
    @



  • in my code instead of enabled (false),it was hide().i wrote it by mistake.
    thanx for suggesting me ,but i tried your code,it is doing the same thing as my hide function.when i press my pushbutton3,i want that only the second ellipse got disappear and remaining figure remains same.but as i applied your code it hides both my inner circle as both of my widgets are hiding.

    and when i apply my hide function to widget1,all of my widgets are hiding..
    as i am new to Qt please suggest me the right way with changes in a code..
    once again thanx for your help


  • Moderators

    ok, this means that e.g. widget2 is a child of widget1. So it's normal behavior that a parent widget also hides it's child widgets.
    You need to ensure that all widgets have the same parent, then your code will work. I can't help you with that because i never used Qt Designer to build up a GUI. But i'm sure it provides options for such a simple task.



  • thanks a lot for your suggestion.but i believe there is a silly mistake in the code but i am not able to find that where i am going wrong..
    i hope sooner you could find a solution for this as i have to complete my project and this is just the beginning.....



  • thanx raven .thanx a lot .i tried in my ui and found that all widgets were having a common parent so i resolved that issue and appllied ur code again.and it worked perfectly...
    thanx .
    please send me your email id .in future also if i will be having any issues related qt will ask you only raven...


  • Moderators

    [quote author="sidharth" date="1368611482"]
    please send me your email id .in future also if i will be having any issues related qt will ask you only raven...[/quote]
    No :)
    Keep using the forums. Since this way it may help others with the same problem and also more people are reading it.



  • i am new in qt . i have created 3 layers of widget on mainwindow.now i want to set the coordinates system such that my (0,0) got set on centre of widget and accordingly follows coordinate system.
    i dont want to use set viewport or setwindow functions because these functions use QPainter and i dont want to use qpainter.
    i want that once i set my coordinates system i need not to set it again nd again..please help me out

    any help will be appreciated


Log in to reply