2010-08-31 3 views
0

Я создаю программное обеспечение с использованием C++ и QT, и у меня есть два виджета одного типа QRadioButon и один QTabWidget. Моя потребность в том, что я хочу отправить сигнал с помощью переключателя, и я хочу, чтобы всякий раз, когда кнопка проверяется, содержимое вкладки изменяется. Может ли кто-нибудь предложить, как это сделать? Я попытался создать слот моего класса виджетов, и в этом слоте я назвал конструктор класса tab, но проблема заключается в том, что конструктор не вызван. вот код я использую ..Как подключить QRadioButton к 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

Пожалуйста, узнайте, как вставлять код. Мои глаза истекают кровью, пытаясь прочесть это. Во-вторых, вы не можете подключить сигнал к конструктору, что не имеет никакого смысла. – teukkam

+0

Надеюсь, что настоящий код не выглядит так ... беспорядочным. Также, как меняется вкладка в слоте, подключенном к переключателю * не *? –

ответ

2

В файле определения заголовка вашего класса v_lab вы должны иметь что-то вроде этого:

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

И вы не можете подключить сигнал к конструктору.

Смежные вопросы