• Qt 输入组控件(Input Widgets)& 显示组控件(Display Widgets)详解


    一、Qt 输入组控件(Input Widgets)

    Qt Input Widgets是一组用户界面元素,用于输入和显示文字和数字等的数据。这些小部件可以组成各种不同的表单和对话框,用户可以使用这些小部件与程序交互。

    以下是Qt Input Widgets的一些常见小部件:

    1. QLineEdit:用于单行文本输入,比如用户名和密码等。
    2. QTextEdit:用于多行文本输入,比如邮件正文等。
    3. QPlainTextEdit:用于纯文本的多行输入,比如代码编辑器等。
    4. QSpinBox:用于数字输入,比如选择年龄等。
    5. QComboBox:用于下拉选择列表,比如选择性别等。
    6. QCheckBox:用于选择复选框,比如选择喜欢的运动等。
    7. QRadioButton:用于选择单选按钮,比如选择语言等。

    Qt Input Widgets全部部件如下图:

    控件名称依次解释如下:

    • 编辑组合框
    • 字体组合框
    • 行编辑框
    • 文本编辑框
    • 多行文本编辑器
    • 整数旋转框
    • 小数旋转框
    • 时间编辑
    • 日期编辑
    • 日期时间编辑
    • 表盘控件
    • 水平和垂直滚动条
    • 水平和垂直滑动条
    • 快捷键输入控件

    案例分析:

    main.window.h

    1. #ifndef MAINWINDOW_H
    2. #define MAINWINDOW_H
    3. #include
    4. // 1:Combo Box控件
    5. #include
    6. // 2:FontComboBox控件
    7. #include
    8. #include
    9. // 3:Line Edit控件
    10. #include
    11. #include
    12. // 4:Plain Text Edit控件
    13. #include
    14. #include
    15. // 5:Spin Box控件
    16. #include
    17. // 6:时间控件
    18. #include
    19. #include
    20. #include
    21. // 7: Scroll Bar控件
    22. #include
    23. // 8: Key Sequence Edit控件
    24. #include
    25. QT_BEGIN_NAMESPACE
    26. namespace Ui { class MainWindow; }
    27. QT_END_NAMESPACE
    28. class MainWindow : public QMainWindow
    29. {
    30. Q_OBJECT
    31. public:
    32. MainWindow(QWidget *parent = nullptr);
    33. ~MainWindow();
    34. private:
    35. Ui::MainWindow *ui;
    36. // 1:声明一个QComboBox对象
    37. private:
    38. QComboBox *combobox;
    39. private slots:
    40. void comboboxIndex(int);
    41. // 2:声明QFontComboBox/QLabel对象
    42. private:
    43. QFontComboBox *fontcombobox;
    44. QLabel *qlabels;
    45. private slots:
    46. void fontcomboboxFunc(QFont);
    47. // 3:声明QLineEdit/QPushButton/QLabel对象
    48. private:
    49. QLineEdit *lineedit;
    50. QPushButton *pushbutton;
    51. QLabel *qlabely;
    52. private slots:
    53. void pushbuttonclicked();
    54. // 4:声明QPlainTextEdit/QRadioButton对象
    55. private:
    56. QPlainTextEdit *plaintedit;
    57. QRadioButton *radiobutton;
    58. private slots:
    59. void radioButtonClicked();
    60. // 5:声明QPlainTextEdit/QRadioButton对象
    61. private:
    62. QSpinBox *spinbox;
    63. private slots:
    64. void spinboxValueChanged(int);
    65. // 6:声明QDateTimeEdit/QTimeEdit/QDateEdit对象
    66. private:
    67. QDateTimeEdit *dte;
    68. QTimeEdit *te;
    69. QDateEdit *de;
    70. // 7:声明QScrollBar对象
    71. private:
    72. QScrollBar *hscrollbar,*vscrollbar;
    73. // 8:声明QKeySequenceEdit对象
    74. private:
    75. QKeySequenceEdit *kse;
    76. private slots:
    77. void keyseqeditChanged(const QKeySequence &);
    78. };
    79. #endif // MAINWINDOW_H

    main.cpp

    1. #include "mainwindow.h"
    2. #include
    3. int main(int argc, char *argv[])
    4. {
    5. QApplication a(argc, argv);
    6. MainWindow w;
    7. w.show();
    8. return a.exec();
    9. }

    mainwindow.cpp

    1. #include "mainwindow.h"
    2. #include "ui_mainwindow.h"
    3. #include
    4. #include
    5. #include
    6. #include
    7. MainWindow::MainWindow(QWidget *parent)
    8. : QMainWindow(parent)
    9. , ui(new Ui::MainWindow)
    10. {
    11. ui->setupUi(this);
    12. // 设置主空格的显示位置及大小
    13. this->setGeometry(300,200,1000,600);
    14. // 1:QComboBox
    15. combobox=new QComboBox(this); // 实例化对象
    16. combobox->setGeometry(10,10,200,30);
    17. combobox->addItem("北京市");
    18. combobox->addItem("上海市");
    19. combobox->addItem("天津市");
    20. combobox->addItem("重庆市");
    21. combobox->addItem("湖南省");
    22. combobox->addItem("江西省");
    23. combobox->addItem("广东省");
    24. combobox->addItem("香港特别行政区");
    25. combobox->addItem("澳门特别行政区");
    26. // 信号槽函数连接实现
    27. connect(combobox,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));
    28. // 2:QFontComboBox/QLabel
    29. fontcombobox=new QFontComboBox(this);
    30. qlabels=new QLabel(this);
    31. fontcombobox->setGeometry(10,50,200,30);
    32. qlabels->setGeometry(10,70,300,50);
    33. // 信号与槽函数连接
    34. connect(fontcombobox,SIGNAL(currentFontChanged(QFont)),this,SLOT(fontcomboboxFunc(QFont)));
    35. // 3:QLineEdit/QPushButton/QLabel
    36. lineedit=new QLineEdit(this);
    37. lineedit->setGeometry(10,150,200,30);
    38. pushbutton=new QPushButton(this);
    39. pushbutton->setGeometry(220,150,100,30);
    40. pushbutton->setText("点击我");
    41. qlabely=new QLabel(this);
    42. qlabely->setGeometry(10,200,400,30);
    43. qlabely->setText("你输入的内容为:");
    44. // 信号与槽函数连接
    45. connect(pushbutton,SIGNAL(clicked()),this,SLOT(pushbuttonclicked()));
    46. // 4:QPlainTextEdit/QRadioButton
    47. plaintedit=new QPlainTextEdit(this);
    48. plaintedit->setGeometry(10,250,400,200);
    49. radiobutton=new QRadioButton(this);
    50. radiobutton->setGeometry(300,220,200,30);
    51. radiobutton->setText("只读模式");
    52. // 设置工作目录为可执行程序的工作目录
    53. QDir::setCurrent(QCoreApplication::applicationDirPath());
    54. QFile fe("moc_mainwindow.cpp"); // moc(Meta-Object Compiler,也就是“元对象编译器”)找不到返回上一级
    55. fe.open((QFile::ReadOnly|QFile::Text));
    56. // 加载到文件流
    57. QTextStream strin(&fe);
    58. plaintedit->insertPlainText(strin.readAll());
    59. // 信号与槽函数连接
    60. connect(radiobutton,SIGNAL(clicked()),this,SLOT(radioButtonClicked()));
    61. // 5: 改变窗口背景颜色
    62. this->setStyleSheet("QMainWindow{background-color:""rgba(250,220,120,100%)}");
    63. spinbox=new QSpinBox(this);
    64. spinbox->setGeometry(440,250,150,30);
    65. spinbox->setRange(0,100);
    66. spinbox->setSingleStep(10);
    67. spinbox->setValue(100);
    68. spinbox->setSuffix("%不透明度");
    69. // 信号与槽函数连接
    70. connect(spinbox,SIGNAL(valueChanged(int)),this,SLOT(spinboxValueChanged(int)));
    71. // 6:QDateTimeEdit/QTimeEdit/QDateEdit
    72. dte=new QDateTimeEdit(QDateTime::currentDateTime(),this);
    73. dte->setGeometry(440,290,200,30);
    74. te=new QTimeEdit(QTime::currentTime(),this);
    75. te->setGeometry(440,330,200,30);
    76. de=new QDateEdit(QDate::currentDate(),this);
    77. de->setGeometry(440,370,200,30);
    78. // 7: QScrollBar
    79. hscrollbar=new QScrollBar(Qt::Horizontal,this);
    80. hscrollbar->setGeometry(0,500,1000,30);
    81. vscrollbar=new QScrollBar(Qt::Vertical,this);
    82. vscrollbar->setGeometry(970,0,30,500);
    83. // 8:QKeySequenceEdit
    84. kse=new QKeySequenceEdit(this);
    85. kse->setGeometry(400,530,200,30);
    86. // 信号与槽函数连接
    87. connect(kse,SIGNAL(keySequenceChanged(const QKeySequence &)),
    88. this,SLOT(keyseqeditChanged(const QKeySequence &)));
    89. }
    90. MainWindow::~MainWindow()
    91. {
    92. delete ui;
    93. }
    94. // 1:
    95. void MainWindow::comboboxIndex(int index)
    96. {
    97. qDebug()<<"你选择的区别是:"<itemText(index)<
    98. QMessageBox mybox(QMessageBox::Question,"信息",combobox->itemText(index),QMessageBox::Yes|QMessageBox::No);
    99. mybox.exec();
    100. }
    101. // 2:
    102. void MainWindow::fontcomboboxFunc(QFont font)
    103. {
    104. qlabels->setFont(font);
    105. QString qStr="罗小白的干爹";
    106. qlabels->setText(qStr);
    107. }
    108. // 3:
    109. void MainWindow::pushbuttonclicked()
    110. {
    111. QString qStr;
    112. qStr="你输入的内容为:";
    113. qStr=qStr+lineedit->text();
    114. qlabely->setText(qStr);
    115. lineedit->clear();
    116. }
    117. // 4:
    118. void MainWindow::radioButtonClicked()
    119. {
    120. if(radiobutton->isChecked()){
    121. plaintedit->setReadOnly(true);
    122. }
    123. else
    124. plaintedit->setReadOnly(false);
    125. }
    126. // 5:
    127. void MainWindow::spinboxValueChanged(int x)
    128. {
    129. double dx=(double)x/100;
    130. this->setWindowOpacity(dx);
    131. }
    132. // 8:
    133. void MainWindow::keyseqeditChanged(const QKeySequence &key)
    134. {
    135. if(key==QKeySequence(tr("Ctrl+Q")))
    136. this->close();
    137. else
    138. qDebug()<toString()<
    139. }

    编译执行结果:

    二、Qt 显示组控件(Display Widgets)

    Qt Display Widgets 是 Qt 框架中用于显示和展示数据的相关窗口部件。该部件库包含了多种用于显示文本、图像、图表、列表、树形结构等数据的窗口部件,支持用户交互、布局和样式自定义等功能。以下是 Qt Display Widgets 的主要部件:

    1. QLabel:用于显示文本和图像。

    2. QTextEdit:用于显示和编辑富文本。

    3. QPlainTextEdit:用于显示和编辑纯文本。

    4. QListView:用于显示列表数据。

    5. QTreeView:用于显示树形结构数据。

    6. QTableWidget:用于显示二维表格数据。

    7. QChartView:用于显示各种图表,如折线图、柱状图、饼图等。

    Qt Display Widgets 全部部件如下图:

    控件名称依次解释如下:

    • Label: 标签
    • Text Browser:文本浏览器
    • Graphics View :图形视图框架
    • Calendar Widget : 日历控件
    • LCD Number:液晶字体数字控件
    • Progress Bar: 进度条
    • Horizontal Line/Vertical Line :水平线/垂直线
    • OpenGL Widget : OpenGL 图形染控件
    • QQuickWidget :QML 嵌入控件

    案例实现功能:

    • Label: 标签 -> 放图片
    • Text Browser:文本浏览器 -> 存放打开的文件
    • 测试进度条
    • 通过按钮开始或暂停定时

    ui绘图:

    widget.h

    1. #ifndef WIDGET_H
    2. #define WIDGET_H
    3. #include
    4. // 1:
    5. #include
    6. // 2:
    7. #include
    8. // 4:
    9. #include
    10. QT_BEGIN_NAMESPACE
    11. namespace Ui { class Widget; }
    12. QT_END_NAMESPACE
    13. class Widget : public QWidget
    14. {
    15. Q_OBJECT
    16. public:
    17. Widget(QWidget *parent = nullptr);
    18. ~Widget();
    19. private slots:
    20. void on_pushButtonProgressBar_clicked();
    21. void on_pushbtnstart_clicked();
    22. void on_pushbtnpause_clicked();
    23. void on_pushbtnreset_clicked();
    24. // 4:
    25. // 自定义函数:定时器
    26. void on_timerout();
    27. private:
    28. int iValues=0;
    29. QTimer *timers; // 定时器
    30. void InitFunc();
    31. private:
    32. Ui::Widget *ui;
    33. // 1:
    34. private:
    35. void textlabelFunc();
    36. // 2:
    37. private:
    38. void textbrowserFuncReadTxt();
    39. };
    40. #endif // WIDGET_H

    main.cpp

    1. #include "widget.h"
    2. #include
    3. int main(int argc, char *argv[])
    4. {
    5. QApplication a(argc, argv);
    6. Widget w;
    7. w.show();
    8. return a.exec();
    9. }

    widget.cpp

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. // 1:调用函数
    9. textlabelFunc();
    10. // 2:调用函数
    11. textbrowserFuncReadTxt();
    12. // 3:初始化进程条
    13. ui->progressBar->setRange(0,1000000);
    14. ui->progressBar->setValue(0);
    15. // 4:
    16. InitFunc();
    17. // 信号与槽函数连接
    18. connect(timers,&QTimer::timeout,this,&Widget::on_timerout);
    19. }
    20. Widget::~Widget()
    21. {
    22. delete ui;
    23. }
    24. // 1:
    25. void Widget::textlabelFunc()
    26. {
    27. QString fName("D:\\刘德华.jpg");
    28. QImage *qimg=new QImage;
    29. if(!(qimg->load(fName))) // 判断加载图片
    30. {
    31. QMessageBox::information(this,"失败","加载jpg图片失败,请重新检查?");
    32. delete qimg;
    33. return;
    34. }
    35. ui->label->setPixmap(QPixmap::fromImage(*qimg));
    36. }
    37. // 2:
    38. void Widget::textbrowserFuncReadTxt()
    39. {
    40. QString qStrdData;
    41. QFile qfile("d:\\THIRD-PARTY-LICENSES.txt");
    42. if(!(qfile.open(QIODevice::ReadOnly|QIODevice::Text)))
    43. {
    44. QMessageBox::warning(this,"失败","打开文件失败,请重新检查?");
    45. }
    46. while (!qfile.atEnd())
    47. {
    48. QByteArray ay=qfile.readLine();
    49. QString strs(ay);
    50. qStrdData.append(strs);
    51. }
    52. ui->textBrowser->setText(qStrdData);
    53. }
    54. void Widget::on_pushButtonProgressBar_clicked()
    55. {
    56. for(int i=1;i<=1000000;i++)
    57. {
    58. for(int j=0;j<1;j++)
    59. {
    60. ui->progressBar->setValue(i);
    61. }
    62. }
    63. }
    64. void Widget::on_pushbtnstart_clicked()
    65. {
    66. timers->start(); // 1s触发一次操作
    67. ui->pushbtnstart->setEnabled(false);
    68. ui->pushbtnpause->setEnabled(true);
    69. ui->pushbtnreset->setEnabled(true);
    70. }
    71. void Widget::on_pushbtnpause_clicked()
    72. {
    73. timers->stop(); // 1s触发一次操作
    74. ui->pushbtnstart->setEnabled(true);
    75. ui->pushbtnpause->setEnabled(false);
    76. ui->pushbtnreset->setEnabled(true);
    77. }
    78. void Widget::on_pushbtnreset_clicked()
    79. {
    80. timers->stop(); // 1s触发一次操作
    81. iValues=0;
    82. ui->lcdNumber->display(iValues);
    83. ui->pushbtnstart->setEnabled(true);
    84. ui->pushbtnpause->setEnabled(true);
    85. ui->pushbtnreset->setEnabled(false);
    86. }
    87. void Widget::InitFunc()
    88. {
    89. timers=new QTimer(this);
    90. timers->setInterval(1000); // 定时周期为1s
    91. timers->stop();
    92. }
    93. void Widget::on_timerout()
    94. {
    95. iValues++;
    96. ui->lcdNumber->display(iValues);
    97. }

    编译执行结果:

  • 相关阅读:
    Jetson AGX Orin R34.1.1 源码环境搭建 & SDKmanager刷机
    汇集YOLO系列经典和前沿算法,实现高精度实时检测!
    【HTML5高级第二篇】WebWorker多线程、EventSource事件推送、History历史操作
    【SpringMVC笔记14】SpringMVC集成Jackson和FastJson两种方式处理json数据
    [python]python监听、操作键盘鼠标库pynput详细教程
    阿里云有奖体验:用PolarDB-X搭建一个高可用系统
    关于实现 Vue 动态数据显示,比如数字 0 或 1 怎么显示为 男 或 女等等的动态显示实现方法
    Spring Boot 2.x系列【23】应用监控篇之Info端点
    [ 常用工具篇 ] kali 忘记 root 密码 -- 修改 root 密码
    mysql面试题31:一条SQL语句在MySQL中如何执行的
  • 原文地址:https://blog.csdn.net/m0_74712453/article/details/133758604