Search code examples
c++qtqwidgetqtgui

How to navigate from one ListWidget to other ListWidget using QStackedwidget in qt


I am using QStackedWidget class in qt and wanted to move from one list to other list(QListWidget). But i am unable to move.

I have used QStackedWidget class and added both list under it :

QStackedWidget *stack = new QStackedWidget();
stack->addWidget(list1);
stack->addWidget(list2);

List1 and List2 are having diff elements :

List1->addItem("Hello");
list1->addItem("Hi");

When clicking on Hello ListWidgetItem, it should move to list 2....


Solution

  • You would need to use something like this code below.

    myclass.h

    class MyClass : public QObject
    {
        Q_OBJECT
        public:
            explicit MyClass(QObject *parent = 0);
    
        ...
    
        public slots:
            void swapListWidgets();
    
        ...
    
        private:
            QStackedWidget *m_stackedWidget;
    }
    

    myclass.cpp

    MyClass::MyClass(QObject *parent)
        : QObject(parent)
        , m_stackedWidget(new QStackedWidget(this))
    {
        QListWidget *listWidget1 = new QListWidget(m_stackedWidget);
        listWidget1->addItem("Hello");
        listWidget1->addItem("Hi");
        QListWidget *listWidget2 = new QListWidget(m_stackedWidget);
    
        m_stackedWidget->addWidget(listWidget1);
        m_stackedWidget->addWidget(listWidget2);
        ...
    
        connect(listWidget1, SIGNAL(itemClicked(QListWidgetItem * item)), SLOT(swapListWidgets(QListWidgetItem * item)));
    
        // OR
    
        connect(m_stackedWidget.index(0), SIGNAL(itemClicked(QListWidgetItem * item)), SLOT(swapListWidgets(QListWidgetItem * item)));
    
        ...
    
    }
    
    ...
    
    MyClass::swapListWidgets(QListWidgetItem *item)
    {
        if (item.text() == "Hello")
            m_stackedWidget.setCurrentWidget(list2);
            // or m_stackedWidget.setCurrentIndex(1);
    }
    
    ...