• QT基础第二天(2)qt基础部件:按钮类,布局类,输出类,输入类,容器等个别举例


    前面我们说了qt程序的基本开发流程

    1. 申明必要的部件

    2. 将部件构造出来

    3. 必要的布局

    4. 前后台关联

    5. 美化

    今天我们接着来说一说qt的基础部件

    一.按钮类

    Push Button :按钮

    Tool Button :工具按钮

    Radio Button :单选按钮

    Check Button :复选框

    Command Link Button :命令链接按钮

    Dialog Button Box :对话框按钮盒

     例子:

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. class Widget : public QWidget
    11. {
    12. Q_OBJECT
    13. public slots:
    14. void xxx(bool x);
    15. void showpass(bool);
    16. public:
    17. Widget(QWidget *parent = 0);
    18. ~Widget();
    19. private:
    20. QPushButton *bt_button; //普通按钮
    21. QToolButton *bt_tool; //工具按钮
    22. QRadioButton *bt_radio; //单选按钮
    23. QRadioButton *bt_radio1;//单选按钮
    24. QCheckBox *bt_check; //复选按钮
    25. QCheckBox *bt_check1; //复选按钮
    26. QCommandLinkButton *bt_cmd;//命令按钮
    27. QLineEdit *le;
    28. QCheckBox *ck;
    29. };
    30. #endif // WIDGET_H
    1. #include "widget.h"
    2. #include
    3. #include
    4. Widget::Widget(QWidget *parent)
    5. : QWidget(parent)
    6. {
    7. bt_button = new QPushButton("普通按钮");
    8. bt_tool = new QToolButton;
    9. bt_tool->setText("工具按钮");
    10. bt_radio = new QRadioButton("单选按钮");
    11. bt_radio1 = new QRadioButton("单选按钮1");
    12. bt_check = new QCheckBox("复选框");
    13. bt_check1 = new QCheckBox("复选框1");
    14. bt_cmd = new QCommandLinkButton("百度");
    15. bt_cmd->setDescription("www.baidu.com");
    16. //应用
    17. le = new QLineEdit;
    18. le->setEchoMode(QLineEdit::Password);
    19. ck = new QCheckBox("显示密码");
    20. QVBoxLayout *vbox = new QVBoxLayout;
    21. vbox->addWidget(bt_button);
    22. vbox->addWidget(bt_tool);
    23. vbox->addWidget(bt_radio);
    24. vbox->addWidget(bt_radio1);
    25. vbox->addWidget(bt_check);
    26. vbox->addWidget(bt_check1);
    27. vbox->addWidget(bt_cmd);
    28. vbox->addWidget(le);
    29. vbox->addWidget(ck);
    30. setLayout(vbox);
    31. // connect(bt_button, SIGNAL(clicked(bool)), this, SLOT(xxx(bool)));
    32. // connect(bt_radio, SIGNAL(toggled(bool)), this, SLOT(xxx(bool)));
    33. connect(bt_check, SIGNAL(toggled(bool)), this, SLOT(xxx(bool)));
    34. connect(ck, SIGNAL(toggled(bool)), this, SLOT(showpass(bool)));
    35. }
    36. void Widget::showpass(bool x)
    37. {
    38. if(!x)
    39. le->setEchoMode(QLineEdit::Password);
    40. else
    41. le->setEchoMode(QLineEdit::Normal);
    42. }
    43. void Widget::xxx(bool x)
    44. {
    45. qDebug() << x;
    46. }
    47. Widget::~Widget()
    48. {
    49. }

     

    二.布局类

    Vertical Layout:垂直布局

    Horizontal Layout:水平布局

    Grid Layout:网格布局

    Form Layout:表单布局

    三.输出类

    Label:标签

    Text Browser:文本浏览器

    Graphics View:图形视图

    Calendar Widget:日历

    LCD Number:液晶数字

    Progress Bar:进度条

    Horizontal Line:水平线

    Vertical Line:垂直线

    OpenGL Widget:OpenGL 工具

    QQuickWidget:嵌入QML工具

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. class Widget : public QWidget
    11. {
    12. Q_OBJECT
    13. public slots:
    14. void showDate(QDate);
    15. void update_value(void);
    16. public:
    17. Widget(QWidget *parent = 0);
    18. ~Widget();
    19. private:
    20. QLabel *lb_text; //文本标签
    21. QLabel *lb_pix; //图片标签
    22. QLabel *lb_gif; //动画标签
    23. QTextBrowser *tbrowser;
    24. QCalendarWidget *caw;
    25. QLCDNumber *lcd;
    26. QProgressBar *pbr;
    27. };
    28. #endif // WIDGET_H
    1. #include "widget.h"
    2. #include
    3. #include
    4. #include
    5. Widget::Widget(QWidget *parent)
    6. : QWidget(parent)
    7. {
    8. /*标签*/
    9. lb_text = new QLabel("标签测试");
    10. lb_text->setAlignment(Qt::AlignCenter);
    11. lb_pix = new QLabel("我是图片");
    12. lb_pix->setMinimumSize(10, 10);
    13. lb_pix->setScaledContents(true); //自动缩放显示
    14. lb_pix->setPixmap(QPixmap("C:\\Users\\ThinkPad T490\\Desktop\\220501\\1.bmp"));
    15. lb_gif = new QLabel("我是动画");
    16. QMovie *m = new QMovie("C:\\Users\\ThinkPad T490\\Desktop\\220501\\1.gif");
    17. lb_gif->setMovie(m);
    18. m->start();
    19. /*文本浏览器(html)*/
    20. tbrowser = new QTextBrowser;
    21. tbrowser->setText("\
    22. \
    23. \
    24. \
    25. runoob.com\
    26. \
    27. \
    28. AAAAAAAA

      \
    29. BBBBBBBBB

      \
    30. \
    31. ");
    32. /*日历窗口*/
    33. caw = new QCalendarWidget;
    34. /*七段数码管*/
    35. lcd = new QLCDNumber;
    36. lcd->setMinimumHeight(50);
    37. lcd->display(250); //显示数字
    38. /*进度条*/
    39. pbr = new QProgressBar;
    40. pbr->setValue(60);
    41. QVBoxLayout *vbox = new QVBoxLayout;
    42. vbox->addWidget(pbr);
    43. vbox->addWidget(lcd);
    44. vbox->addWidget(caw);
    45. vbox->addWidget(tbrowser);
    46. vbox->addWidget(lb_text);
    47. vbox->addWidget(lb_pix);
    48. vbox->addWidget(lb_gif);
    49. setLayout(vbox);
    50. connect(caw, SIGNAL(clicked(QDate)), this, SLOT(showDate(QDate)));
    51. QTimer *t = new QTimer;
    52. connect(t, SIGNAL(timeout()), this, SLOT(update_value()));
    53. t->start(100);
    54. }
    55. void Widget::update_value(void)
    56. {
    57. static int data = 0;
    58. lcd->display(data);
    59. pbr->setValue(data);
    60. data++;
    61. if(data == 100)
    62. data = 0;
    63. }
    64. void Widget::showDate(QDate d)
    65. {
    66. lb_text->setText(d.toString());
    67. }
    68. Widget::~Widget()
    69. {
    70. }


    四.输入类

    Combo Box:组合框

    1. /*组合框、下拉框*/
    2. cmb = new QComboBox; //构造组合框
    3. cmb->addItem("C:\\Users\\ThinkPad T490\\Desktop\\220501\\1.bmp");
    4. cmb->addItem("C:\\Users\\ThinkPad T490\\Desktop\\220501\\pc.bmp");
    5. cmb->addItem("C:\\Users\\ThinkPad T490\\Desktop\\220501\\x.jpg");
    6. connect(cmb, SIGNAL(activated(int)), this, SLOT(show_int(int)));
    7. connect(cmb, SIGNAL(activated(QString)), this, SLOT(show_str(QString)));
    8. connect(cmb, SIGNAL(activated(QString)), lb, SLOT(setText(QString)));
    9. //connect(cmb, &QComboBox::activated, [&](int i) { lb->setPixmap(QPixmap(cmb->itemText(i)));});
    10. connect(cmb, SIGNAL(activated(QString)), this, SLOT(show_pic(QString)));


    Font Combo Box:字体组合框

    1. /*字体下拉框*/
    2. fcmb = new QFontComboBox;
    3. connect(fcmb, &QFontComboBox::currentFontChanged, [&](QFont f){ lb->setFont(f);});


    Line Edit:行编辑框

    1. /*行编辑框*/
    2. le = new QLineEdit;
    3. le->setPlaceholderText("用户名");


    Text Edit:文本编辑框

    1. /*文本编辑框*/
    2. te = new QTextEdit;
    3. connect(te, SIGNAL(textChanged()), this, SLOT(te_to_lb()));


    Plain Text Edit:纯文本编辑框
    Spin Box:数字显示框(旋转盒)

    1. /*自旋框*/
    2. sb = new QSpinBox;
    3. sb->setMaximum(20); //最大只能为20
    4. sb->setSingleStep(10); //设置单步跨度
    5. connect(sb, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));


    Double Spin Box:Double 数字显示框
    Time Edit:时间编辑

    1. /*时间编辑框*/
    2. timee = new QTimeEdit;
    3. connect(timee, SIGNAL(timeChanged(QTime)), this, SLOT(show_time(QTime)));


    Date Edit:日期编辑
    Date/Time Edit:日期/时间编辑
    Dial:拨号
    Horizontal Scroll Bar:水平滚动条
    Vertical Scroll Bar:垂直滚动条

    1. /*滚动条*/
    2. slb = new QScrollBar;
    3. slb->setRange(0, 1000); //设置调节范围
    4. slb->setOrientation(Qt::Horizontal); //显示方案“水平”
    5. connect(slb, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));


    Horizontal Slider:水平滑块
    Vertical Slider:垂直滑块

    1. /*滑动杆儿*/
    2. sd = new QSlider;
    3. sd->setRange(0, 1000); //设置调节范围
    4. sd->setOrientation(Qt::Horizontal); //显示方案“水平”
    5. connect(sd, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));


    Key Sequence Edit:按键序列编辑框
    五.容器类

    Group Box:组框

    1. lb[0] = new QLabel("题目1 safasfasfasdf");
    2. rb[0] = new QRadioButton("aaaaa");
    3. rb[1] = new QRadioButton("bbbbb");
    4. rb[2] = new QRadioButton("ccccc");
    5. QVBoxLayout *vbox1 = new QVBoxLayout;
    6. vbox1->addWidget(lb[0]);
    7. vbox1->addWidget(rb[0]);
    8. vbox1->addWidget(rb[1]);
    9. vbox1->addWidget(rb[2]);
    10. g1 = new QGroupBox("AAAA"); //带边框显示和注释的容器
    11. g1->setLayout(vbox1);


    Scroll Area:滚动区域
    Tool Box:工具箱
    Tab Widget:标签部件
    Stacked Widget:堆叠部件
    Frame:框架
    Widget:小部件
    MDI Area:MDI区域
    Dock Widget:停靠窗体部件
    QAxWidget:封装Flash的ActiveX控件
    六.空间间隔组

    Horizontal Spacer:水平间隔

    Vertical Spacer:垂直间隔

    七.项目视图组

    List View:列表视图

    Tree View:树形视图

    Table View:表格式图

    Column View:列视图

    Undo View:撤消视图

    八.项目控件组

    List Widget:列表控件

    Tree Widget:树形控件

    Table Widget:表格控件

    面向对象的思想:

    例子:

    qustion.h

    1. #ifndef QUSTIONWIDGET_H
    2. #define QUSTIONWIDGET_H
    3. #include
    4. #include
    5. #include
    6. #include
    7. class qustionWidget : public QWidget
    8. {
    9. Q_OBJECT
    10. public:
    11. qustionWidget(QWidget *parent = nullptr);
    12. public:
    13. void setquestion(QString str); //设置题目
    14. void addAnswer(QString str); //添加选项
    15. private:
    16. QLabel *lb; //显示题目
    17. //QVector bt;
    18. QVBoxLayout *vbox; //显示选项的
    19. };
    20. #endif // QUSTIONWIDGET_H

    widget.h

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. #include "qustionwidget.h"
    5. class Widget : public QWidget
    6. {
    7. Q_OBJECT
    8. public:
    9. Widget(QWidget *parent = 0);
    10. ~Widget();
    11. qustionWidget *q1;
    12. qustionWidget *q2;
    13. qustionWidget *q3;
    14. };
    15. #endif // WIDGET_H

    qustiopn.cpp 

    1. #include "qustionwidget.h"
    2. qustionWidget::qustionWidget(QWidget *parent) :
    3. QWidget(parent)
    4. {
    5. lb = new QLabel;
    6. //bt.clear();
    7. vbox = new QVBoxLayout;
    8. vbox->addWidget(lb);
    9. setLayout(vbox);
    10. }
    11. void qustionWidget::setquestion(QString str)
    12. {
    13. lb->setText(str);
    14. }
    15. void qustionWidget::addAnswer(QString str)
    16. {
    17. QRadioButton *an = new QRadioButton(str);
    18. vbox->addWidget(an);
    19. }

     widget.cpp

    1. #include "widget.h"
    2. #include
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. {
    6. q1 = new qustionWidget; //题目“控件”
    7. q1->setquestion("xxxxxxxxxxxxxxxxxxxxxxxxxxx");
    8. q1->addAnswer("aaaaaaa");
    9. q1->addAnswer("bbbbbbb");
    10. q1->addAnswer("ccccccc");
    11. q1->addAnswer("dddddddddd");
    12. q2 = new qustionWidget; //题目“控件”
    13. q2->setquestion("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy");
    14. q2->addAnswer("xxxxx");
    15. q2->addAnswer("yyyyyy");
    16. q2->addAnswer("zzzzzzzzzzzzz");
    17. q3 = new qustionWidget; //题目“控件”
    18. q3->setquestion("yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy");
    19. q3->addAnswer("xxxxx");
    20. q3->addAnswer("yyyyyy");
    21. q3->addAnswer("zzzzzzzzzzzzz");
    22. QVBoxLayout *vbox = new QVBoxLayout;
    23. vbox->addWidget(q1);
    24. vbox->addWidget(q2);
    25. vbox->addWidget(q3);
    26. setLayout(vbox);
    27. }
    28. Widget::~Widget()
    29. {
    30. }

    效果:

     

  • 相关阅读:
    入门力扣自学笔记202 C++ (题目编号:808)
    IDEA插件开发(22)--Status Bar Widgets
    读写稳定高速的国产固态U盘,办公学习好工具,ORICO快闪U盘上手
    【计算机网络】第四章.网络层 网络层超硬核复习好物(1),考前必看!!
    xiaodi-笔记
    C&C++内存管理
    git--基础--04--分支管理规范
    变周期控制思路
    map、set、multimap和multiset的使用【STL】
    微信小游戏开发之坦克大战(比羊了个羊还好玩系列)
  • 原文地址:https://blog.csdn.net/fuyuyf/article/details/126021970