2010-08-31 3 views
0

Je crée un logiciel en utilisant C++ et QT, et j'ai deux widgets un de type QRadioButon et un QTabWidget. Mon besoin est que je veux envoyer le signal d'un bouton radio et je veux que chaque fois que le bouton est coché le contenu de l'onglet est changé. Quelqu'un peut-il suggérer comment faire cela? J'ai essayé de créer une fente de ma classe de widget et dans cette fente j'ai appelé le constructeur de la classe d'étiquette mais le problème est que le construtor n'est pas appelé. est ici le code que je suis en utilisant ..comment connecter un QRadioButton à un QTabWidget?

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

S'il vous plaît apprendre à insérer le code. Mes yeux saignent d'essayer de lire ceci. Deuxièmement, vous ne pouvez pas connecter un signal à un constructeur, cela n'a aucun sens. – teukkam

+0

J'espère que le code actuel n'a pas l'air ... hasardeux. Aussi, comment changer l'onglet dans la fente connectée au bouton radio * ne * fonctionne pas? –

Répondre

2

Dans le fichier de définition d'en-tête de votre classe v_lab vous devriez avoir quelque chose comme ceci:

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

Et vous ne pouvez pas connecter un signal à un constructeur.

Questions connexes