开发者

how to connect a QRadioButton to a QTabWidget?

i am creating a software using C++ and QT,and i have two widget one of type QRadioButon and one QTabWidget. My need is that i want to send signal from a radio button and i want that whenever the button is checked the content of tab get changed. Can anyone suggest how to do that? I tried creating a slot of my widget class and in that slot i called the constructor of tab class but the problem is the construtor is not getting called. here is the code i am using..

#include <QtGui>
#include "v_lab.h"

v_lab::v_lab(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle("Virtual Lab");
    maingroup=new QGroupBox(this);
    maingroup->setTitle("Algorithms");
    maingroup->setMinimumWidth(200);
    maingroup->setMaximumWidth(240);
    maingroup->setFlat(false);
    p=new QPalette;
    p->setColor(QPalette::Background,QColor(233,212,102));
    setPalette(*p);  

    box=new QGroupBox(maingroup);
    box->setFlat(false);
    box->setTitle("Searching Algorithm");

    linear_search=new QRadioButton("Linear Search",box);
    linear_search->setChecked(1);
    binary_search=new QRadioButton("Binary Search",box);

    box1=new QGroupBox(maingroup);
    box1->setFlat(false);
    box1->setTitle("Sorting Algorithms");

    bubble_sort=new QRadioButton("Bubble Sort",box1);
    selection_sort=new QRadioButton("Selection Sort",box1);

    box2=new QGroupBox(maingroup);
    box2->setFlat(false);
    box2->setTitle("Tree Algorithms");

    infix_traversal=new QRadioButton("Infix Traversal",box2);
    prefix_traversal=new QRadioButton("Prefix Traversal",box2);
    postfix_traversal=new QRadioButton("Postfix Traversal",box2);

    box3=new QGroupBox(maingroup);
    box3->setFlat(false);
    box3->setTitle("Graph Algorithms");

    bfs=new QRadioButton("BFS",box3);

    dfs=new QRadioButton("DFS",box3);
    shortest_path=new QRadioButton("Shortest Path",box3);

    QString string1="go to hell";
    tab=new QTabWidget;
    tab->addTab(new algorithm(string1),"Algorithm");
    // tab->addTab(new psudo_code(),"Pseduo-Code");
    tab->setMinimumWidth(250);
    tab->setMaximumWidth(400);

    //Layout
    mainlayout=new QHBoxLayout(this);
    mainlayout->add开发者_如何学GoWidget(maingroup);

    mainlayout->addWidget(tab);
    mainlayout->addStretch();
    main_left_pane_layout=new QVBoxLayout(maingroup);

    main_left_pane_layout->addWidget(box);
    main_left_pane_layout->addWidget(box1);
    main_left_pane_layout->addWidget(box2);
    main_left_pane_layout->addWidget(box3);

    left_pane_box=new QVBoxLayout(box);

    left_pane_box->addWidget(linear_search);
    left_pane_box->addWidget(binary_search);

    left_pane_box1=new QVBoxLayout(box1);

    left_pane_box1->addWidget(bubble_sort);
    left_pane_box1->addWidget(selection_sort);

    left_pane_box2=new QVBoxLayout(box2);

    left_pane_box2->addWidget(infix_traversal);
    left_pane_box2->addWidget(prefix_traversal);
    left_pane_box2->addWidget(postfix_traversal);

    left_pane_box3=new QVBoxLayout(box3);

    left_pane_box3->addWidget(bfs);
    left_pane_box3->addWidget(dfs);
    left_pane_box3->addWidget(shortest_path);

    connect(binary_search,SIGNAL(clicked()),this,SLOT(peeyush()));
}

algorithm::algorithm(const QString &string,QWidget *parent)
    : QWidget(parent)
{
    label=new QLabel(string);
    main_layout=new QVBoxLayout;
    main_layout->addWidget(label);
    main_layout->addStretch();
    setLayout(main_layout);
}

/*
psudo_code::psudo_code(QWidget *parent)
    : QWidget(parent)
{
    label1=new QLabel("Hello Peeyush Chandel");
    main_layout1=new QVBoxLayout;
    main_layout1->addWidget(label1);
    main_layout1->addStretch();
    setLayout(main_layout1);
}
*/

void v_lab::peeyush()
{
    QString string1="new string";
    algorithm obj(string1);
    //exit(1);
}


In the header definition file of your v_lab class you should have something like this:

// Includes here.

class v_lab: public QDialog
{
    Q_OBJECT // VERY important!

public:
    // Other things here.

private slots: // VERY important. You can use public slots too.
    void peeyush();
}

And you cannot connect a signal to a constructor.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜