C++ QT布局显示

C++ QT布局显示,c++,qt,C++,Qt,我是新的Qt应用程序编程,我有一个任务要完成,即 我需要创建一个类似油漆的应用程序 根据左侧面板对象,必须显示右侧列表 PFA 所以现在我只能显示右侧面板 更清楚地说 我用左侧的QGroupBox和按钮 右侧我使用QGridLayout显示特定对象 居中图形视图(忽略此点) 现在,当我在按下按钮后调用函数时,单击按钮1:应仅显示编号的对象按钮2:应仅显示其他对象按钮3:应显示空平面按钮N:应显示所有对象 有人能给我推荐一些小代码吗。。。。像 ui->gridLayout\u 1->。。。(隐藏

我是新的Qt应用程序编程,我有一个任务要完成,即

  • 我需要创建一个类似油漆的应用程序

  • 根据左侧面板对象,必须显示右侧列表

  • PFA

    所以现在我只能显示右侧面板

    更清楚地说

  • 我用左侧的QGroupBox和按钮

  • 右侧我使用QGridLayout显示特定对象

  • 居中图形视图(忽略此点)

  • 现在,当我在按下按钮后调用函数时,单击按钮1:应仅显示编号的对象按钮2:应仅显示其他对象按钮3:应显示空平面按钮N:应显示所有对象

    有人能给我推荐一些小代码吗。。。。像

    ui->gridLayout\u 1->。。。(隐藏以前的选项)

    第二次调用时
    ui->gridLayout\u 1->addWidget(label0,0,0)应显示相关信息


    第三次调用时,显示所有对象
    ui->gridLayout\u 1->addWidget(label0,0,0)

    编辑:在看到一个更好的示例,说明您试图实现的目标后,我使用QStackedWidget将其组合在一起。我认为下面的代码模仿了您正在寻找的行为。这取代了我以前的答案,因为我不想添加任何不必要的混淆。

    主窗口

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QGridLayout>
    #include <QHBoxLayout>
    #include <QLabel>
    #include <QLineEdit>
    #include <QMainWindow>
    #include <QPushButton>
    #include <QStackedWidget>
    #include <QWidget>
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
        QWidget *central_widget = new QWidget(this);
        QHBoxLayout *central_layout = new QHBoxLayout();
    
        QVBoxLayout *ctl_btn_layout = new QVBoxLayout();
        QPushButton *ctl_btn_1 = new QPushButton("1", central_widget);
        QPushButton *ctl_btn_2 = new QPushButton("2", central_widget);
    
        QStackedWidget *widget_stack = new QStackedWidget(central_widget);
    
        QWidget *page_0 = new QWidget();
    
        QWidget *page_1 = new QWidget();
        QGridLayout *page_1_layout = new QGridLayout();
        QPushButton *r_btn = new QPushButton("R", page_1);
        QPushButton *j_btn = new QPushButton("J", page_1);
        QPushButton *l_btn = new QPushButton("L", page_1);
        QPushButton *o_btn = new QPushButton("O", page_1);
        QPushButton *v_btn = new QPushButton("V", page_1);
        QPushButton *f_btn = new QPushButton("F", page_1);
    
        QWidget *page_2 = new QWidget();
        QVBoxLayout *page_2_layout = new QVBoxLayout();
        QPushButton *btn_1 = new QPushButton("1", page_2);
        QPushButton *btn_2 = new QPushButton("2", page_2);
        QPushButton *btn_3 = new QPushButton("3", page_2);
        QPushButton *btn_4 = new QPushButton("4", page_2);
        QPushButton *btn_5 = new QPushButton("5", page_2);
        QPushButton *btn_6 = new QPushButton("6", page_2);
    
        QLabel *r = new QLabel("R", central_widget);
        QLabel *j = new QLabel("J", central_widget);
        QLabel *id = new QLabel("ID", central_widget);
        QLabel *x = new QLabel("X", central_widget);
        QLabel *y = new QLabel("Y", central_widget);
        QLineEdit *r_line = new QLineEdit(central_widget);
        QLineEdit *j_line = new QLineEdit(central_widget);
        QLineEdit *id_line = new QLineEdit(central_widget);
        QLineEdit *x_line = new QLineEdit(central_widget);
        QLineEdit *y_line = new QLineEdit(central_widget);
        QVBoxLayout *lines_layout = new QVBoxLayout();
    
    public slots:
        void ctl_btn_1_clicked();
        void ctl_btn_2_clicked();
    };
    
    #endif // MAINWINDOW_H
    
    这是通过使用QStackedWidget实现的,它由3个QWidget填充。第一个小部件完全为空,以模拟示例中的空页面。第二个和第三个小部件的布局包含不同的按钮配置,QStackedWidget将通过连接到按钮插槽的函数在页面之间翻转


    注意,我倾向于不使用W/Qt Creator的表单设计器,更喜欢纯C++ UI设计。不管你怎么设置,不管有没有表单,我只是觉得这样比较容易。Main.cpp在新的QtGUI项目中保留为默认值,未选中“生成表单”框

    我想我了解你的拍摄目的,并更新了我之前的答案。
    #include "mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
    {
        ctl_btn_layout->addWidget(ctl_btn_1);
        connect(ctl_btn_1, SIGNAL(clicked(bool)), this, SLOT(ctl_btn_1_clicked()));
    
        ctl_btn_layout->addWidget(ctl_btn_2);
        connect(ctl_btn_2, SIGNAL(clicked(bool)), this, SLOT(ctl_btn_2_clicked()));
    
        central_layout->addLayout(ctl_btn_layout);
    
        page_1_layout->addWidget(r_btn, 0, 0, 1, 1);
        page_1_layout->addWidget(j_btn, 1, 1, 1, 1);
        page_1_layout->addWidget(l_btn, 2, 0, 1, 1);
        page_1_layout->addWidget(o_btn, 3, 1, 1, 1);
        page_1_layout->addWidget(v_btn, 4, 2, 1, 1);
        page_1_layout->addWidget(f_btn, 5, 3, 1, 1);
        page_1->setLayout(page_1_layout);
    
        page_2_layout->addWidget(btn_1);
        page_2_layout->addWidget(btn_2);
        page_2_layout->addWidget(btn_3);
        page_2_layout->addWidget(btn_4);
        page_2_layout->addWidget(btn_5);
        page_2_layout->addWidget(btn_6);
        page_2->setLayout(page_2_layout);
    
        widget_stack->addWidget(page_0); //Empty QWidget.
        widget_stack->addWidget(page_1);
        widget_stack->addWidget(page_2);
        central_layout->addWidget(widget_stack);
    
        lines_layout->addWidget(r);
        r->hide();
        lines_layout->addWidget(r_line);
        r_line->hide();
        lines_layout->addWidget(j);
        j->hide();
        lines_layout->addWidget(j_line);
        j_line->hide();
        lines_layout->addWidget(id);
        id->hide();
        lines_layout->addWidget(id_line);
        id_line->hide();
        lines_layout->addWidget(x);
        x->hide();
        lines_layout->addWidget(x_line);
        x_line->hide();
        lines_layout->addWidget(y);
        y->hide();
        lines_layout->addWidget(y_line);
        y_line->hide();
        central_layout->addLayout(lines_layout);
    
        central_widget->setLayout(central_layout);
        setCentralWidget(central_widget);
    }
    
    MainWindow::~MainWindow()
    {
    
    }
    
    void MainWindow::ctl_btn_1_clicked()
    {
        if (j->isVisible())
        {
            j->hide();
            j_line->hide();
        }
        r->show();
        r_line->show();
        if (!id->isVisible())
        {
            id->show();
            id_line->show();
            x->show();
            x_line->show();
            y->show();
            y_line->show();
        }
        widget_stack->setCurrentIndex(1);
    }
    
    void MainWindow::ctl_btn_2_clicked()
    {
        if (r->isVisible())
        {
            r->hide();
            r_line->hide();
        }
        j->show();
        j_line->show();
        if (!id->isVisible())
        {
            id->show();
            id_line->show();
            x->show();
            x_line->show();
            y->show();
            y_line->show();
        }
        widget_stack->setCurrentIndex(2);
    }