0

我正在使用 C++ 和 QT 创建一个软件,我有两个小部件,一个是 QRadioButon 类型,一个是 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);
}
4

1 回答 1

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

而且您不能将信号连接到构造函数。

于 2010-08-31T14:31:55.460 回答