• QtC++与QButtonBox详解


    介绍

    QButtonBox 是 Qt 中的一个控件类,用于管理和布局按钮,通常用于对话框、窗体和用户界面中的按钮集成。以下是关于 QButtonBox 的详细讲解:

    1. 按钮管理: QButtonBox 用于管理一组按钮,包括标准按钮(如"确定"、“取消”、"应用"等)以及自定义按钮。这些按钮可以方便地添加到对话框或窗体中,以执行不同的操作。

    2. 标准按钮支持: QButtonBox 提供了内置的标准按钮角色,如"确定"(AcceptRole)、“取消”(RejectRole)、“应用”(ApplyRole)等。这些角色使按钮的行为和外观在不同操作系统上保持一致。

    3. 自定义按钮: 除了标准按钮,您可以向 QButtonBox 添加自定义按钮,以执行特定应用程序操作。这些自定义按钮可以使用 QButtonBox::addButton 方法添加,并指定其角色,如QDialogButtonBox::ActionRole

    4. 按钮排列方式: QButtonBox 允许按钮以水平或垂直的方式排列,具体取决于您的布局需求。这有助于确保按钮布局在不同操作系统上具有一致的外观。

    5. 点击事件处理: 您可以连接按钮的 clicked 信号,以响应用户单击按钮的事件。这允许您执行相关的操作,如保存数据、关闭对话框等。

    6. 按钮组管理: 您可以将多个 QButtonBox 分为逻辑组,每个组可以包含不同的按钮,以便根据需求管理多组按钮。

    7. 快捷键支持: QButtonBox 支持按钮的快捷键,允许用户使用键盘来执行操作,提高了可访问性。

    8. 跨平台: Qt 是跨平台的框架,因此 QButtonBox 在不同操作系统上提供一致的外观和行为,无需过多的平台特定代码。

    总之,QButtonBox 是一个强大的工具,用于管理和布局按钮,通常用于对话框、窗体和用户界面中。它简化了按钮的管理和交互,并确保按钮的外观和行为在不同操作系统上保持一致。希望这个讲解有助于您理解 QButtonBox 的作用和用法。

    示例

    #include 
    #include 
    #include 
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        // 示例1: 创建 QButtonBox 并添加标准按钮
        QDialog dialog1;
        dialog1.setWindowTitle("示例1: 创建 QButtonBox 并添加标准按钮");
        QButtonBox buttonBox1(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, &dialog1);
        dialog1.setLayout(&buttonBox1);
    
        // 示例2: 添加自定义按钮
        QDialog dialog2;
        dialog2.setWindowTitle("示例2: 添加自定义按钮");
        QButtonBox buttonBox2(Qt::Horizontal, &dialog2);
        buttonBox2.addButton("自定义按钮1", QDialogButtonBox::ActionRole);
        buttonBox2.addButton("自定义按钮2", QDialogButtonBox::ActionRole);
        dialog2.setLayout(&buttonBox2);
    
        dialog1.show();
        dialog2.show();
    
        return app.exec();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    #include 
    #include 
    #include 
    #include 
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        // 示例3: 垂直排列的按钮
        QDialog dialog3;
        dialog3.setWindowTitle("示例3: 垂直排列的按钮");
        QButtonBox buttonBox3(Qt::Vertical, &dialog3);
        buttonBox3.addButton("按钮1", QDialogButtonBox::ActionRole);
        buttonBox3.addButton("按钮2", QDialogButtonBox::ActionRole);
        buttonBox3.addButton("按钮3", QDialogButtonBox::ActionRole);
        dialog3.setLayout(&buttonBox3);
    
        // 示例4: 信号与槽连接
        QDialog dialog4;
        dialog4.setWindowTitle("示例4: 信号与槽连接");
        QButtonBox buttonBox4(Qt::Horizontal, &dialog4);
        QPushButton *customButton = new QPushButton("自定义按钮", &dialog4);
        buttonBox4.addButton(customButton, QDialogButtonBox::ActionRole);
        dialog4.setLayout(&buttonBox4);
    
        QObject::connect(&buttonBox4, &QButtonBox::accepted, [&]() {
            // 用户单击 "确定" 按钮时触发的操作
            qDebug() << "用户单击确定按钮。";
        });
    
        QObject::connect(&buttonBox4, &QButtonBox::rejected, [&]() {
            // 用户单击 "取消" 按钮时触发的操作
            qDebug() << "用户单击取消按钮。";
        });
    
        // 示例5: 多个按钮组
        QDialog dialog5;
        dialog5.setWindowTitle("示例5: 多个按钮组");
        QButtonBox buttonBox5(Qt::Horizontal, &dialog5);
        buttonBox5.addButton("按钮1", QDialogButtonBox::ActionRole);
        buttonBox5.addButton("按钮2", QDialogButtonBox::ActionRole);
    
        QButtonBox buttonBox6(Qt::Horizontal, &dialog5);
        buttonBox6.addButton("按钮3", QDialogButtonBox::ActionRole);
        buttonBox6.addButton("按钮4", QDialogButtonBox::ActionRole);
    
        dialog5.show();
    
        return app.exec();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    #include 
    #include 
    #include 
    #include 
    #include 
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        // 示例6: 根据操作系统风格排列按钮
        QDialog dialog6;
        dialog6.setWindowTitle("示例6: 根据操作系统风格排列按钮");
        QButtonBox buttonBox6(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog6);
        dialog6.setLayout(&buttonBox6);
    
        // 示例7: 自定义按钮的点击事件
        QDialog dialog7;
        dialog7.setWindowTitle("示例7: 自定义按钮的点击事件");
        QButtonBox buttonBox7(&dialog7);
        QPushButton *customButton = new QPushButton("自定义按钮", &dialog7);
        buttonBox7.addButton(customButton, QDialogButtonBox::ActionRole);
        dialog7.setLayout(&buttonBox7);
    
        QObject::connect(customButton, &QPushButton::clicked, [&]() {
            QMessageBox::information(&dialog7, "信息", "自定义按钮被点击了!");
        });
    
        // 示例8: 更多按钮角色
        QDialog dialog8;
        dialog8.setWindowTitle("示例8: 更多按钮角色");
        QButtonBox buttonBox8(Qt::Horizontal, &dialog8);
        buttonBox8.addButton("保存", QDialogButtonBox::SaveRole);
        buttonBox8.addButton("不保存", QDialogButtonBox::DiscardRole);
        buttonBox8.addButton("取消", QDialogButtonBox::RejectRole);
        dialog8.setLayout(&buttonBox8);
    
        dialog6.show();
        dialog7.show();
        dialog8.show();
    
        return app.exec();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    #include 
    #include 
    #include 
    #include 
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
    
        // 示例9: 水平按钮组和垂直按钮组
        QDialog dialog9;
        dialog9.setWindowTitle("示例9: 水平按钮组和垂直按钮组");
        QButtonBox buttonBox9(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog9);
        QButtonBox buttonBox10(QDialogButtonBox::Save | QDialogButtonBox::Cancel, Qt::Vertical, &dialog9);
        dialog9.setLayout(&buttonBox9);
    
        // 示例10: 混合使用 QButtonBox 和单独按钮
        QDialog dialog10;
        dialog10.setWindowTitle("示例10: 混合使用 QButtonBox 和单独按钮");
        QButtonBox buttonBox11(QDialogButtonBox::Save | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog10);
        QPushButton *customButton = new QPushButton("自定义按钮", &dialog10);
        QObject::connect(customButton, &QPushButton::clicked, [&]() {
            // 自定义按钮的点击事件
        });
        QVBoxLayout layout10;
        layout10.addWidget(&buttonBox11);
        layout10.addWidget(customButton);
        dialog10.setLayout(&layout10);
    
        // 示例11: 动态添加按钮
        QDialog dialog11;
        dialog11.setWindowTitle("示例11: 动态添加按钮");
        QButtonBox buttonBox12(Qt::Horizontal, &dialog11);
        QPushButton *addButton = new QPushButton("添加按钮", &dialog11);
        QPushButton *removeButton = new QPushButton("移除按钮", &dialog11);
        QObject::connect(addButton, &QPushButton::clicked, [&]() {
            // 动态添加按钮
            buttonBox12.addButton("动态按钮", QDialogButtonBox::ActionRole);
        });
        QObject::connect(removeButton, &QPushButton::clicked, [&]() {
            // 动态移除按钮
            buttonBox12.removeButton(buttonBox12.button(QDialogButtonBox::ActionRole));
        });
        QVBoxLayout layout11;
        layout11.addWidget(&buttonBox12);
        layout11.addWidget(addButton);
        layout11.addWidget(removeButton);
        dialog11.setLayout(&layout11);
    
        dialog9.show();
        dialog10.show();
        dialog11.show();
    
        return app.exec();
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
  • 相关阅读:
    (C语言)printf打印的字符串太长了,我想分两行!
    机器学习 泰坦尼克号——灾难中的机器学习
    计算机组成原理-存储器概念
    远程调用--Feign
    k8s 1.22.3使用持久化卷之存储类StorageClass+NFS pv动态供应
    双飞翼布局和圣杯布局
    手写一个泛型双向链表
    【网络】HTTP报文信息
    【科研主题检索】借助多方翻译软件,融合给出的研究主题对象的翻译结果确定检索式
    外观专利申请流程是怎样的?
  • 原文地址:https://blog.csdn.net/LuXiaoXin1999/article/details/134275736