OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2684|回复: 0

《I.MX6U 嵌入式Qt开发指南》第七章 Qt控件 7.2 输入窗口部件

[复制链接]

1070

主题

1081

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4443
金钱
4443
注册时间
2019-5-8
在线时间
1199 小时
发表于 2022-7-27 12:17:30 | 显示全部楼层 |阅读模式

1)实验平台:正点原子阿尔法Linux开发板
2)  章节摘自【正点原子】《I.MX6U 嵌入式Qt开发指南》
3)购买链接:https://detail.tmall.com/item.htm?id=609033604451
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/arm-linux/zdyz-i.mx6ull.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)正点原子阿尔法Linux交流群:1027879335




第七章 Qt控件

7.2 输入窗口部件
     Qt Designer窗口部件提供的面板中,提供了16种输入部件如下
image052.jpg

(1)           Comb Box:组合框
(2)           Font Comb Box:字体组合框
(3)           Line Edit:单行编辑框
(4)           Text Edit:文本编辑框
(5)           Plain Text Edit:纯文本编辑框
(6)           Spin Box:数字旋转框
(7)           Double Spin Box:双精度数字旋转框
(8)           Time Edit:时间编辑框
(9)           Date Edit:日期编辑框
(10)       Date/Time Edit:日期时间编辑框
(11)       Dial:数字拨盘框
(12)       Horizontal Scroll Bar:水平滚动条
(13)       Vertical Scroll Bar:垂直滚动条
(14)       Horizontal Slider:水平滑动条
(15)       Vertical Slider:垂直滑动条
(16)       Key sequence Edit:按键序列编辑框
     这十六种按钮部件作用简介如下:
     QComboBox继承QWidget类,被QFontComboBox类继承。通常用于用户显示选项列表的方法,这种方法占用最少的屏幕空间。
     QFontComboBox继承QComboBox。QFontComboBox小部件是一个允许用户选择字体系列的组合框。组合框中填充了按字母顺序排列的字体家族名称列表。FontComboBox常用于工具栏,与ComboBox一起用于控制字体大小,并与两个ToolButtons一起用于粗体和斜体。
     QLineEdit继承QWidget。QLineEdit小部件是一个单行文本编辑器。行编辑允许用户使用一组有用的编辑函数输入和编辑一行纯文本,包括撤消和重做、剪切和粘贴以及拖放。通过更改行编辑的echoMode(),它还可以用作“只写”字段,用于输入如密码等。
     QTextEdit继承QAbstractScrollArea,被QTextBrowser继承。QTextEdit是一个高级所见即所得查看器/编辑器,支持使用html样式的标记进 行 rich text 格式化。它经过优化以处理大型文档并快速响应用户输入。QTextEdit用于段落和字符。段落是格式化的字符串,它被字包装以适应小部件的宽度。在阅读纯文本时,默认情况下,一个换行表示一个段落。一份文件由零个或多个段落组成。段落中的文字与段落的对齐方式一致。段落之间用硬换行符隔开。段落中的每个字符都有自己的属性,例如字体和颜色。QTextEdit可以显示图像,列表和表格。如果文本太大而无法在文本编辑的视图中查看,视图中则会出现滚动条。
    QPlainTextEdit是一个支持纯文本的高级查看器/编辑器。它被优化为处理大型文档和快速响应用户输入。
    QSpinBox继承QAbstractSpinBox。用于处理整数和离散值(例如:月份名称)而QDoubleSpinBox则用于处理浮点值。他们之间的区别就是处理数据的类型不同,其他功能都基本相同。QSpinBox允许用户通过单击上/下按钮或按下键盘上的上/下按钮来选择一个值,以增加/减少当前显示的值。用户还可以手动输入值。
    QDoubleSpinBox继承QAbstractSpinBox。QDoubleSpinBox则用于处理浮点值。QDoubleSpinBox允许用户通过单击“向上”和“向下”按钮或按下键盘上的“向上”或“向下”按钮来选择当前显示的值。用户还可以手动输入值。
    QTimeEdit继承QDateTimeEdit。QTimeEdit用于编辑时间,而QDateEdit用于编辑日期。
    QDateEdit继承QDateTimeEdit。QDateEdit用于编辑日期,而QTimeEdit用于编辑时间。
    QDateTimeEdit类提供了一个用于编辑日期和时间的小部件。QDateTimeEdit允许用户使用键盘或箭头键编辑日期,以增加或减少日期和时间值。箭头键可用于在QDateTimeEdit框中从一个区域移动到另一个区域。
    QDial类提供了一个圆形范围控制(如速度计或电位器)。QDial用于当用户需要在可编程定义的范围内控制一个值,并且该范围要么是环绕的(例如,从0到359度测量的角度),要么对话框布局需要一个正方形小部件。由于QDial从QAbstractSlider继承,因此拨号的行为与滑块类似。 当wrapping()为false(默认设置)时,滑块和刻度盘之间没有真正的区别。 它们共享相同的信号,插槽和成员功能。 您使用哪一个取决于您的用户期望和应用程序类型。
    QScrollBar继承QAbstractSlider。QScrollBar小部件提供垂直或水平滚动条,允许用户访问比用于显示文档的小部件大的文档部分。它提供了用户在文档中的当前位置和可见文档数量的可视化指示。滚动条通常配有其他控件,可以实现更精确的导航。
    QSlider继承QAbstractSlider。QSlider类提供垂直或水平滑动条小部件,滑动条是用于控制有界值的典型小部件。它允许用户沿着水平或垂直凹槽移动滑块手柄,并将手柄的位置转换为合法范围内的整数值。
    QKeySequenceEdit继承QWidget。这个小部件允许用户选择QKeySequence, QKeySequence通常用作快捷方式。当小部件接收到焦点并在用户释放最后一个键后一秒结束时,将启动记录,通常用作记录快捷键。

7.2.1 QComboBox
7.2.1.1 控件简介
     QComboBox类提供了Qt下拉组合框的组件。

7.2.1.2 用法示例
     例10_qcombobox,选择省份(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
image054.jpg

       在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码
  2. 1   #ifndef MAINWINDOW_H
  3. 2   #define MAINWINDOW_H
  4. 3
  5. 4   #include <QMainWindow>
  6. 5   /* 引入QComboBox */
  7. 6   #include <QComboBox>
  8. 7
  9. 8   class MainWindow : public QMainWindow
  10. 9   {
  11. 10      Q_OBJECT
  12. 11
  13. 12  public:
  14. 13      MainWindow(QWidget *parent = nullptr);
  15. 14      ~MainWindow();
  16. 15
  17. 16  private:
  18. 17      /* 声明一个QComboBox对象 */
  19. 18      QComboBox *comboBox;
  20. 19
  21. 20  private slots:
  22. 21      /* 声明QComboBox对象的槽函数 */
  23. 22       void comboBoxIndexChanged(int);
  24. 23
  25. 24  };
  26. 25  #endif // MAINWINDOW_H
复制代码
       第20行,声明一个QComboBox对象。
       在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2   /* 引入QDebug */
  4. 3   #include <QDebug>
  5. 4
  6. 5   MainWindow::MainWindow(QWidget *parent)
  7. 6       : QMainWindow(parent)
  8. 7   {
  9. 8       /* 设置主窗体的显示位置与大小 */
  10. 9       this->setGeometry(0, 0, 800, 480);
  11. 10
  12. 11      /* 实例化对象 */
  13. 12      comboBox = new QComboBox(this);
  14. 13
  15. 14      /* 设置comboBox的显示位置与大小 */
  16. 15      comboBox->setGeometry(300, 200, 150, 30);
  17. 16
  18. 17      /* 添加项,我们添加三个省份,作为comboBox的三个选项 */
  19. 18      comboBox->addItem("广东(默认)");
  20. 19      comboBox->addItem("湖南");
  21. 20      comboBox->addItem("四川");
  22. 21
  23. 22      /* 信号槽连接 */
  24. 23      connect(comboBox, SIGNAL(currentIndexChanged(int)), this,
  25. 24              SLOT(comboBoxIndexChanged(int)));
  26. 25  }
  27. 26
  28. 27  MainWindow::~MainWindow()
  29. 28  {
  30. 29  }
  31. 30
  32. 31  void MainWindow::comboBoxIndexChanged(int index)
  33. 32  {
  34. 33      /* 打印出选择的省份 */
  35. 34      qDebug()<<"您选择的省份是"<< comboBox->itemText(index)<<endl;
  36. 35  }
复制代码
       第18至20行,添加Item,也就是项。
       第30至34行,当点击下拉列表改变选择的省份就会触发currentIndexChanged(int)这个信号,就会相应打印项的省份名称。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   #include <QApplication>
  5. 4
  6. 5   int main(int argc, char *argv[])
  7. 6   {
  8. 7       QApplication a(argc, argv);
  9. 8       MainWindow w;
  10. 9       w.show();
  11. 10      return a.exec();
  12. 11  }
复制代码

7.2.1.3 运行效果
      程序编译运行的结果如下,当点击下拉选择框选择省份时,槽函数将打印出您选择的省份。
image056.jpg

       点击选择“湖南”,则打印出“您选择的省份是湖南”。
image058.jpg

        QComboBox我们常会在一些需要下拉列表选择的项目中用到。比如QQ登录如果有多个帐号选择就需要这个QComboBox。
7.2.2 QFontComboBox
7.2.2.1 控件简介
        QFontComboBox类提供了下拉选择字体系列的组合框小部件。

7.2.2.2 用法示例
例11_qfontcombobox,字体选择(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
image060.jpg
  
      在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码
  2. 1 #ifndef MAINWINDOW_H
  3. 2 #define MAINWINDOW_H
  4. 3
  5. 4 #include <QMainWindow>
  6. 5 /* 引入QFontComboBox */
  7. 6 #include <QFontComboBox>
  8. 7 /* 引入QLable */
  9. 8 #include <QLabel>
  10. 9
  11. 10 class MainWindow : public QMainWindow
  12. 11 {
  13. 12 Q_OBJECT
  14. 13
  15. 14 public:
  16. 15 MainWindow(QWidget *parent = nullptr);
  17. 16 ~MainWindow();
  18. 17
  19. 18 private:
  20. 19 /* 声明一个QFontComboBox对象 */
  21. 20 QFontComboBox *fontComboBox;
  22. 21 /* 声明一个Label对象,用于显示当前字体变化 */
  23. 22 QLabel *label;
  24. 23
  25. 24 private slots:
  26. 25 /* 声明QFontComboBox对象使用的槽函数 */
  27. 26 void fontComboBoxFontChanged(QFont);
  28. 27
  29. 28 };
  30. 29 #endif // MAINWINDOW_H
复制代码
        第20行,声明一个QFontComboBox对象。
        在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   MainWindow::MainWindow(QWidget *parent)
  5. 4       : QMainWindow(parent)
  6. 5   {
  7. 6       /* 设置主窗体的显示位置和大小 */
  8. 7       this->setGeometry(0, 0, 800, 480);
  9. 8
  10. 9       /* 实例化对象 */
  11. 10      fontComboBox = new QFontComboBox(this);
  12. 11      label = new QLabel(this);
  13. 12
  14. 13      /* 设置显示的位置与大小 */
  15. 14      fontComboBox->setGeometry(280, 200, 200, 30);
  16. 15      label->setGeometry(280, 250, 300, 50);
  17. 16
  18. 17      /* 信号与槽连接 */
  19. 18      connect(fontComboBox, SIGNAL(currentFontChanged(QFont)), this,
  20. 19              SLOT(fontComboBoxFontChanged(QFont)));
  21. 20  }
  22. 21
  23. 22  MainWindow::~MainWindow()
  24. 23  {
  25. 24  }
  26. 25
  27. 26  /* 槽函数实现 */
  28. 27  void MainWindow::fontComboBoxFontChanged(QFont font)
  29. 28  {
  30. 29      /* 将label里的文本内容设置为所选择的字体 */
  31. 30      label->setFont(font);
  32. 31
  33. 32      /* 定义一个字符串接收当前项的字体 */
  34. 33      QString str = "用此标签显示字体效果\n设置的字体为:" +
  35. 34              fontComboBox->itemText(fontComboBox->currentIndex());
  36. 35
  37. 36      /* 将字符串的内容作为label的显示内容 */
  38. 37      label->setText(str);
  39. 38  }
复制代码
       第27至37行,当选择的字体改变时,槽函数就会设置label的字体,并打印当前字体的名称。
       在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   #include <QApplication>
  5. 4
  6. 5   int main(int argc, char *argv[])
  7. 6   {
  8. 7       QApplication a(argc, argv);
  9. 8       MainWindow w;
  10. 9       w.show();
  11. 10      return a.exec();
  12. 11  }
复制代码
7.2.2.3 运行效果
     程序编译运行的结果如下,当点击FontCOmboBox字体组合框选择字体后,Label标签显示的字体将改变为当前所选择的字体。(注意Ubuntu与Windows的字体不一样,所以显示的效果有可能不一样,下图为Ubuntu的字体显示效果)
image062.jpg

      在手机,电脑一些软件都有设置字体的功能,由用户自行选择,所以我们这个QFontComboBox就可以应用于此种场合。当然也有设置字体的大小,颜色等,这些由我们自由设计。

7.2.3 QLineEdit
7.2.3.1 控件简介
     QLineEdit小部件是一个单行文本编辑器。行编辑允许用户使用一组有用的编辑函数输入和编辑一行纯文本。包括撤消和重做、剪切和粘贴以及拖放。通过更改行编辑的echoMode(),它还可以用作“只写”字段,用于输入如密码等。

7.2.3.2 用法示例
     例12_qlineedit,单行输入框(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。
     在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
image068.jpg

     在头文件“mainwindow.h”具体代码如下。像引入头文件,设置主窗体大小位置和实例化对象这种注释我们慢慢淡化,不再写详细注释了。读者看了前面的对这种设置已经很清楚了。
  1. mainwindow.h编程后的代码
  2. 1   #ifndef MAINWINDOW_H
  3. 2   #define MAINWINDOW_H
  4. 3
  5. 4   #include <QMainWindow>
  6. 5   #include <QLineEdit>
  7. 6   #include <QPushButton>
  8. 7   #include <QLabel>
  9. 8
  10. 9   class MainWindow : public QMainWindow
  11. 10  {
  12. 11      Q_OBJECT
  13. 12     
  14. 13  public:
  15. 14      MainWindow(QWidget *parent = nullptr);
  16. 15      ~MainWindow();
  17. 16  private:
  18. 17      /* 声明一个QLineEdit对象 */
  19. 18      QLineEdit *lineEdit;
  20. 19     
  21. 20      /* 声明一个QPushButton对象 */
  22. 21      QPushButton *pushButton;
  23. 22     
  24. 23      /* 声明一个QLabel对象 */
  25. 24      QLabel *label;
  26. 25     
  27. 26  private slots:
  28. 27      /* 声明一个槽函数,响应pushButton的clicked事件 */
  29. 28      void pushButtonClicked();
  30. 29  };
  31. 30  #endif // MAINWINDOW_H
复制代码
     在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   MainWindow::MainWindow(QWidget *parent)
  5. 4       : QMainWindow(parent)
  6. 5   {
  7. 6       this->setGeometry(0, 0, 800, 480);
  8. 7
  9. 8       lineEdit = new QLineEdit(this);
  10. 9       lineEdit->setGeometry(280, 200, 200, 20);
  11. 10
  12. 11      pushButton = new QPushButton(this);
  13. 12      pushButton->setGeometry(500, 200, 50, 20);
  14. 13      pushButton->setText("确认");
  15. 14
  16. 15      label = new QLabel(this);
  17. 16      label->setGeometry(280, 250, 400, 20);
  18. 17      label->setText("您输入的内容是:");
  19. 18
  20. 19      /* 信号槽连接 */
  21. 20      connect(pushButton,SIGNAL(clicked()), this,
  22. 21              SLOT(pushButtonClicked()));
  23. 22  }
  24. 23
  25. 24  MainWindow::~MainWindow()
  26. 25  {
  27. 26  }
  28. 27
  29. 28  void MainWindow::pushButtonClicked()
  30. 29  {
  31. 30      /* 字符串变量str */
  32. 31      QString str;
  33. 32
  34. 33      str = "您输入的内容是:";
  35. 34      str += lineEdit->text();
  36. 35
  37. 36      /* 设置label里的文本显示内容 */
  38. 37      label->setText(str);
  39. 38      /* 在点击了确认键之后清空lineEdit单行输入框 */
  40. 39      lineEdit->clear();
  41. 40  }
复制代码
      第28至40行,当我们在单选输入框里输入完成后,将输入的内容设置为在label的文本内容。
      在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   #include <QApplication>
  5. 4
  6. 5   int main(int argc, char *argv[])
  7. 6   {
  8. 7       QApplication a(argc, argv);
  9. 8       MainWindow w;
  10. 9       w.show();
  11. 10      return a.exec();
  12. 11  }
复制代码

7.2.3.3 运行效果
       程序编译运行的结果如下,当在QLineEdit单行输入框内输入文本内容后,单击QPushButton确认按钮后,QLabel的文本内容将显示您所输入的内容。然后QLineEdit将清空,可再次输入。
image066.jpg

       QLineEdit的简单使用如上,编者也是简单的介绍了它的用法。要想写好一点的例子,需要我们主动思考,比如,做个将这个QLineEdit应用到密码登录窗口上,输入密码,然后判断这个密码是否与预设的密码一样才解锁等。

7.2.4 QTextEdit
7.2.4.1 控件简介
     QTextEdit类提供了一个查看器/编辑器小部件。
7.2.4.2 用法示例
     例13_qtextedit文本编辑框(难度:简单),用一个QTextEdit来演示文本的输入,用两个QPushButton来模拟文本编辑的全选与清除。在QTextEdit里也可用键盘的快捷键(如Ctrl+A)来完成全选,复制,粘贴等操作。Qt提供了全选,复制粘贴等这一类的函数方便用户操作,下面用简单的实例来演示。
     在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码
  2. 1   #ifndef MAINWINDOW_H
  3. 2   #define MAINWINDOW_H
  4. 3   #include <QTextEdit>
  5. 4   #include <QPushButton>
  6. 5
  7. 6   #include <QMainWindow>
  8. 7
  9. 8   class MainWindow : public QMainWindow
  10. 9   {
  11. 10      Q_OBJECT
  12. 11
  13. 12  public:
  14. 13      MainWindow(QWidget *parent = nullptr);
  15. 14      ~MainWindow();
  16. 15
  17. 16  private:
  18. 17      /* 声明一个QTextEdit对象 */
  19. 18      QTextEdit *textEdit;
  20. 19
  21. 20      /* 声明两个QPushButton对象 */
  22. 21      QPushButton *pushButtonSelectAll;
  23. 22      QPushButton *pushButtonClearAll;
  24. 23
  25. 24  private slots:
  26. 25      /* 声明两个槽函数,响应按钮点击响应的事件 */
  27. 26      void pushButtonSelectAllClicked();
  28. 27      void pushButtonClearAllClicked();
  29. 28
  30. 29  };
  31. 30  #endif // MAINWINDOW_H
复制代码
在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   MainWindow::MainWindow(QWidget *parent)
  5. 4       : QMainWindow(parent)
  6. 5   {
  7. 6       /* 设置主窗体显示的位置和大小 */
  8. 7       this->setGeometry(0, 0, 800, 480);
  9. 8
  10. 9       /* 实例和对象,设置位置和显示大小 */
  11. 10      textEdit = new QTextEdit(this);
  12. 11      textEdit->setGeometry(0, 0, 800, 400);
  13. 12
  14. 13      /* 实例和对象,设置位置和显示大小,设置文本 */
  15. 14      pushButtonSelectAll = new QPushButton(this);
  16. 15      pushButtonSelectAll->setGeometry(200, 420, 50, 20);
  17. 16      pushButtonSelectAll->setText("全选");
  18. 17
  19. 18      /* 实例和对象,设置位置和显示大小,设置文本 */
  20. 19      pushButtonClearAll = new QPushButton(this);
  21. 20      pushButtonClearAll->setGeometry(500, 420, 50, 20);
  22. 21      pushButtonClearAll->setText("清除");
  23. 22
  24. 23      /* 信号槽连接 */
  25. 24      connect(pushButtonSelectAll, SIGNAL(clicked()), this,
  26. 25              SLOT(pushButtonSelectAllClicked()));
  27. 26      connect(pushButtonClearAll, SIGNAL(clicked()), this,
  28. 27              SLOT(pushButtonClearAllClicked()));
  29. 28
  30. 29  }
  31. 30
  32. 31  MainWindow::~MainWindow()
  33. 32  {
  34. 33  }
  35. 34
  36. 35  void MainWindow::pushButtonSelectAllClicked()
  37. 36  {
  38. 37      /* 设置焦点为textEdit */
  39. 38      textEdit->setFocus();
  40. 39      /* 判断文本编辑框内容是否为空,不为空则全选 */
  41. 40      if(!textEdit->toPlainText().isEmpty()){
  42. 41          /* 全选 */
  43. 42          textEdit->selectAll();
  44. 43      }
  45. 44  }
  46. 45
  47. 46  void MainWindow::pushButtonClearAllClicked()
  48. 47  {
  49. 48      /* 清空textEdit里的文本内容 */
  50. 49      textEdit->clear();
  51. 50  }
  52. 51
复制代码
第35至49行,当我们在文本输入框里输入完成后,当点击全选按钮后,需要设置焦点到textEdit上,否则将不能设置全选。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   #include <QApplication>
  5. 4
  6. 5   int main(int argc, char *argv[])
  7. 6   {
  8. 7       QApplication a(argc, argv);
  9. 8       MainWindow w;
  10. 9       w.show();
  11. 10      return a.exec();
  12. 11  }
复制代码
7.2.4.3 运行效果
       程序编译运行的结果如下,在编辑框里输入文字后,点击按钮全选,点击清除则清除编辑框内的全部内容。如下图为点击全选的效果。
image070.jpg

7.2.5 QPlainTextEdit
7.2.5.1 控件简介
QPlainTextEdit类提供了一个用于编辑和显示纯文本的小部件,常用于显示多行文本或简单文本。

7.2.5.2 用法示例
例14_qplaintextedit文本浏览编辑器(难度:简单),用一个QPlainTextEdit来读取本当前工程里的一个文件,并用一个RadioButton里将QPlainTextEdit设为只读。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
image072.jpg

在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码
  2. 1   #ifndef MAINWINDOW_H
  3. 2   #define MAINWINDOW_H
  4. 3
  5. 4   #include <QPlainTextEdit>
  6. 5   #include <QRadioButton>
  7. 6
  8. 7   #include <QMainWindow>
  9. 8
  10. 9   class MainWindow : public QMainWindow
  11. 10  {
  12. 11      Q_OBJECT
  13. 12
  14. 13  public:
  15. 14      MainWindow(QWidget *parent = nullptr);
  16. 15      ~MainWindow();
  17. 16
  18. 17  private:
  19. 18      /* 声明对象 */
  20. 19      QPlainTextEdit *plainTextEdit;
  21. 20      QRadioButton *radioButton;
  22. 21
  23. 22  private slots:
  24. 23      /* 槽函数 */
  25. 24      void radioButtonClicked();
  26. 25
  27. 26  };
  28. 27  #endif // MAINWINDOW_H
复制代码
在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2   #include <QDir>
  4. 3   #include <QTextStream>
  5. 4   #include <QCoreApplication>
  6. 5
  7. 6   MainWindow::MainWindow(QWidget *parent)
  8. 7       : QMainWindow(parent)
  9. 8   {
  10. 9       /* 设置当前程序的工作目录为可执行程序的工作目录 */
  11. 10      QDir::setCurrent(QCoreApplication::applicationDirPath());
  12. 11
  13. 12      this->setGeometry(0, 0, 800, 480);
  14. 13
  15. 14      plainTextEdit = new QPlainTextEdit(this);
  16. 15      plainTextEdit->setGeometry(0, 50, 800, 430);
  17. 16
  18. 17      radioButton = new QRadioButton(this);
  19. 18      radioButton->setGeometry(650, 20, 100, 20);
  20. 19      radioButton->setText("只读模式");
  21. 20
  22. 21      /* 打开可执行程序目录里的moc_mainwindow.cpp,注意如果是Windows下
  23. 22     moc_mainwindow.cpp并不在当前目录,而在上一级目录"../moc_mainwindow.cpp"*/
  24. 23      QFile file("moc_mainwindow.cpp");
  25. 24
  26. 25      /* 以只读模式打开,但是可以在plainTextEdit里编辑 */
  27. 26      file.open((QFile::ReadOnly | QFile::Text));
  28. 27
  29. 28      /* 加载到文件流 */
  30. 29      QTextStream in(&file);
  31. 30
  32. 31      /* 从文本流中读取全部 */
  33. 32      plainTextEdit->insertPlainText(in.readAll());
  34. 33
  35. 34      /* 信号槽连接 */
  36. 35      connect(radioButton, SIGNAL(clicked()), this,
  37. 36              SLOT(radioButtonClicked()));
  38. 37
  39. 38  }
  40. 39
  41. 40  MainWindow::~MainWindow()
  42. 41  {
  43. 42  }
  44. 43
  45. 44  void MainWindow::radioButtonClicked()
  46. 45  {
  47. 46      /* 检查radioButton是否选中 */
  48. 47      if(radioButton->isChecked()) {
  49. 48          /* 设置为只读模式 */
  50. 49          plainTextEdit->setReadOnly(true);
  51. 50      } else {
  52. 51          /* 设置为非只读模式 */
  53. 52          plainTextEdit->setReadOnly(false);
  54. 53      }
  55. 54  }
复制代码
第44和54行,检查radioButton是否选中。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   #include <QApplication>
  5. 4
  6. 5   int main(int argc, char *argv[])
  7. 6   {
  8. 7       QApplication a(argc, argv);
  9. 8       MainWindow w;
  10. 9       w.show();
  11. 10      return a.exec();
  12. 11  }
复制代码
7.2.5.3 运行效果
程序编译运行的结果如下,当程序正常运行后会打开程序当前路径下的” moc_mainwindow.cpp”文件,(注意在Windows下moc_mainwindow.cpp应该写成”../ moc_mainwindow.cpp”),且在QPlainTextEdit编辑框下是可编辑的,当选中程序界面上的只读模式时,QPlainTextEdit编辑框就不可以再编辑。相反可以取消只读模式则可以再编辑。
image074.jpg
有了QTextEdit,为什么还有QPlainTextEdit?QPlainTextEdit 可以理解为 QTextEdit的低配版。QPlainTextEdit支持纯文本显示,QTextEdit支持富文本(支持多种格式,比如插入图片,链接等)显示。就是多一个样式。QPlainTextEdit显示的效率比QTextEdit高,如果需要显示大量文字,尤其是需要滚动条来回滚动的时候,QPlainTextEdit要好很多。

7.2.6 QSpinBox
7.2.6.1 控件简介
QSpinBox类提供了一个微调框小部件。

7.2.6.2 用法示例
例15_qspinbox窗口背景不透明调节器(难度:简单),用一个QSpinBox来调节程序窗体的整体不透明度。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
image076.jpg

在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码
  2. #ifndef MAINWINDOW_H
  3. #define MAINWINDOW_H
  4. #include <QMainWindow>
  5. #include <QSpinBox>
  6. class MainWindow : public QMainWindow
  7. {
  8.     Q_OBJECT
  9. public:
  10.     MainWindow(QWidget *parent = nullptr);
  11.     ~MainWindow();
  12. private:
  13.     /* 声明一个QSpinBox对象 */
  14.     QSpinBox *spinBox;
  15. private slots:
  16.     /* 槽函数 */
  17.     void spinBoxValueChanged(int);
  18. };
  19. #endif // MAINWINDOW_H
复制代码
在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   MainWindow::MainWindow(QWidget *parent)
  5. 4       : QMainWindow(parent)
  6. 5   {
  7. 6       this->setGeometry(0, 0, 800, 480);
  8. 7
  9. 8       /* 设置主窗口背景颜色,rgb颜色标准,a代表不透明度(0~100)*/
  10. 9       this->setStyleSheet("QMainWindow{background-color: "
  11. 10                          "rgba(100, 100, 100, 100%) }");
  12. 11
  13. 12      spinBox = new QSpinBox(this);
  14. 13      spinBox->setGeometry(350, 200, 150, 30);
  15. 14
  16. 15      /* 设置范围0~100 */
  17. 16      spinBox->setRange(0, 100);
  18. 17
  19. 18      /* 设置步长为10 */
  20. 19      spinBox->setSingleStep(10);
  21. 20
  22. 21      /* 设置初始值为100 */
  23. 22      spinBox->setValue(100);
  24. 23
  25. 24      /* 设置后缀 */
  26. 25      spinBox->setSuffix("%不透明度");
  27. 26
  28. 27      /* 信号槽连接 */
  29. 28      connect(spinBox,SIGNAL(valueChanged(int)), this,
  30. 29              SLOT(spinBoxValueChanged(int)));
  31. 30  }
  32. 31
  33. 32  MainWindow::~MainWindow()
  34. 33  {
  35. 34  }
  36. 35
  37. 36  void MainWindow::spinBoxValueChanged(int opacity)
  38. 37  {
  39. 38      /* 转换为double数据类型 */
  40. 39      double  dobleopacity = (double)opacity / 100;
  41. 40
  42. 41      /* 设置窗体不透明度,范围是0.0~1.0。1则为不透明,0为全透明 */
  43. 42      this->setWindowOpacity(dobleopacity);
  44. 43  }
复制代码
第42行,设置主窗体的不透明度。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   #include <QApplication>
  5. 4
  6. 5   int main(int argc, char *argv[])
  7. 6   {
  8. 7       QApplication a(argc, argv);
  9. 8       MainWindow w;
  10. 9       w.show();
  11. 10      return a.exec();
  12. 11  }
复制代码
7.2.6.3 运行效果
程序编译运行的结果如下,程序初始化界面时是全不透明,不透明度值为100%,当点击向下调节SpinBox后,整个窗体的不透明将会变小。当不透明度的值变小时,窗口将透明化。
image078.jpg

7.2.7 QDoubleSpinBox7.2.7.1 控件简介
QDoubleSpinBox类提供了一个用于处理浮点值微调框小部件。与QSpinBox作用基本一样,与QSpinBox不同的是,QDoubleSpinBox类处理的是浮点值数据。

7.2.7.2 用法示例
例16_qdoublespinbox窗口大小调节器(难度:简单),用一个QDoubleSpinBox来调节程序窗口的整体大小。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
image080.jpg

在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码
  2. 1   #ifndef MAINWINDOW_H
  3. 2   #define MAINWINDOW_H
  4. 3
  5. 4   #include <QMainWindow>
  6. 5   #include <QDoubleSpinBox>
  7. 6
  8. 7   class MainWindow : public QMainWindow
  9. 8   {
  10. 9       Q_OBJECT
  11. 10
  12. 11  public:
  13. 12      MainWindow(QWidget *parent = nullptr);
  14. 13      ~MainWindow();
  15. 14
  16. 15  private:
  17. 16      /* 声明一个QDoubleSpinBox对象 */
  18. 17      QDoubleSpinBox *doubleSpinBox;
  19. 18
  20. 19  private slots:
  21. 20      /* 槽函数 */
  22. 21      void doubleSpinBoxValueChanged(double);
  23. 22
  24. 23  };
  25. 24  #endif // MAINWINDOW_H
复制代码
在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   MainWindow::MainWindow(QWidget *parent)
  5. 4       : QMainWindow(parent)
  6. 5   {
  7. 6       this->setGeometry(0, 0, 800, 480);
  8. 7
  9. 8       /* 实例化和设置显示的位置与大小 */
  10. 9       doubleSpinBox = new QDoubleSpinBox(this);
  11. 10      doubleSpinBox->setGeometry((this->width() - 200) / 2,
  12. 11                                 (this->height() - 30) / 2,
  13. 12                                 200, 30);
  14. 13      /* 设置前缀 */
  15. 14      doubleSpinBox->setPrefix("窗口大小");
  16. 15
  17. 16      /* 设置后缀 */
  18. 17      doubleSpinBox->setSuffix("%");
  19. 18
  20. 19      /* 设置范围 */
  21. 20      doubleSpinBox->setRange(50.00, 100.00);
  22. 21
  23. 22      /* 设置初始值 */
  24. 23      doubleSpinBox->setValue(100.00);
  25. 24
  26. 25      /* 设置步长 */
  27. 26      doubleSpinBox->setSingleStep(0.1);
  28. 27
  29. 28      /* 信号槽连接 */
  30. 29      connect(doubleSpinBox, SIGNAL(valueChanged(double)),
  31. 30              SLOT(doubleSpinBoxValueChanged(double)));
  32. 31
  33. 32  }
  34. 33
  35. 34  MainWindow::~MainWindow()
  36. 35  {
  37. 36  }
  38. 37
  39. 38  void MainWindow::doubleSpinBoxValueChanged(double value)
  40. 39  {
  41. 40      /* 重新计算窗口的宽与高 */
  42. 41      int w = 800 * value / 100;
  43. 42      int h = 480 * value / 100;
  44. 43
  45. 44      /* 重新设置窗口的宽与高 */
  46. 45      this->setGeometry(0, 0, w, h);
  47. 46
  48. 47      /* 重新设置doubleSpinBox的显示位置 */
  49. 48      doubleSpinBox->setGeometry((this->width() - 200) / 2,
  50. 49                                 (this->height() - 30) / 2,
  51. 50                                 200, 30);
  52. 51
  53. 52  }
复制代码
第35至49行,重新设置主窗体的宽高和doubleSpinBox的显示位置。
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   #include <QApplication>
  5. 4
  6. 5   int main(int argc, char *argv[])
  7. 6   {
  8. 7       QApplication a(argc, argv);
  9. 8       MainWindow w;
  10. 9       w.show();
  11. 10      return a.exec();
  12. 11  }
复制代码
7.2.7.3 运行效果
       程序编译运行的结果如下,程序初始化界面窗口大小值为100%,当点击向下调节QDoubleSpinBox时,整个窗体将按QDoubleSpinBox里数值的比例缩小,最小为50.00%,相反当点击向上调节QDoubleSpinBox时,窗口大小将整体变大,最大为100.00%。
image082.jpg

7.2.8 QTimeEdit7.2.8.1 控件简介
QTimeEdit类提供一个基于QDateTimeEdit类编辑时间的小部件。例在7.2.10小节

7.2.9 QDateEdit
7.2.9.1 控件简介
QDateEdit类提供一个基于QDateTimeEdit类编辑时间的小部件。例在7.2.10小节

7.2.10 QDateTimeEdit
7.2.10.1 控件简介
从名字可知QDateTimeEdit类提供了一个用于编辑日期和时间的小部件。QDateTimeEdit允许用户使用键盘或箭头键编辑日期,以增加或减少日期和时间值。箭头键可用于在QDateTimeEdit框中从一个区域移动到另一个区域。实际上是QDateTimeEdit和QDateEdit的组合。
7.2.10.2 用法示例
例17_qdatetimeedit时间日期展示(难度简单),使用一个QDateTimeEdit,一个QTimeEdit以及一个QDateEdit,传入当前系统时间与日期,展示简单的日期时间控件使用方法。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
image084.jpg
在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码

  2. 1   #ifndef MAINWINDOW_H

  3. 2   #define MAINWINDOW_H

  4. 3

  5. 4   #include <QMainWindow>

  6. 5   #include <QDateTimeEdit>

  7. 6   #include <QTimeEdit>

  8. 7   #include <QDateEdit>

  9. 8

  10. 9   class MainWindow : public QMainWindow

  11. 10  {

  12. 11      Q_OBJECT

  13. 12

  14. 13  public:

  15. 14      MainWindow(QWidget *parent = nullptr);

  16. 15      ~MainWindow();

  17. 16

  18. 17  private:

  19. 18      /* 声明对象 */

  20. 19      QDateTimeEdit *dateTimeEdit;

  21. 20      QTimeEdit *timeEdit;

  22. 21      QDateEdit *dateEdit;

  23. 22  };

  24. 23  #endif // MAINWINDOW_H
复制代码
在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码

  2. 1   #include "mainwindow.h"

  3. 2

  4. 3   MainWindow::MainWindow(QWidget *parent)

  5. 4       : QMainWindow(parent)

  6. 5   {

  7. 6       /* 设置位置与大小 */

  8. 7       this->setGeometry(0, 0, 800, 480);

  9. 8

  10. 9       /*实例化对象,传入当前日期与时间*/

  11. 10      dateTimeEdit = new QDateTimeEdit(

  12.                        QDateTime::currentDateTime(),this);

  13. 11      dateTimeEdit->setGeometry(300, 200, 200, 30);

  14. 12      /* 弹出日期控件与否 */

  15. 13      //dateTimeEdit->setCalendarPopup(true);

  16. 14

  17. 15      /* 实例化对象,传入当前时间 */

  18. 16      timeEdit = new QTimeEdit(QTime::currentTime(),this);

  19. 17      timeEdit->setGeometry(300, 240, 200, 30);

  20. 18

  21. 19      /* 实例化对象,传入当前日期 */

  22. 20      dateEdit = new QDateEdit(QDate::currentDate(),this);

  23. 21      dateEdit->setGeometry(300, 280, 200, 30);

  24. 22  }

  25. 23

  26. 24  MainWindow::~MainWindow()

  27. 25  {

  28. 26  }
复制代码
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码

  2. 1   #include "mainwindow.h"

  3. 2

  4. 3   #include <QApplication>

  5. 4

  6. 5   int main(int argc, char *argv[])

  7. 6   {

  8. 7       QApplication a(argc, argv);

  9. 8       MainWindow w;

  10. 9       w.show();

  11. 10      return a.exec();

  12. 11  }
复制代码
7.2.10.3 运行效果
       程序编译运行的结果如下,当程序初始化时,分别显示系统当前的时间与日期(注意,windows下Qt 程序显示的格式可能不一样,下图为linux下的Qt程序日期显示格式)。
image086.jpg

7.2.11 QDial
7.2.11.1 控件简介
QDial类提供了一个圆形范围控制(如速度计或电位器)。QDial用于当用户需要在可编程定义的范围内控制一个值,并且该范围要么是环绕的(例如,从0到359度测量的角度),要么对话框布局需要一个正方形小部件。由于QDial从QAbstractSlider继承,因此拨号的行为与滑块类似。 当wrapping()为false(默认设置)时,滑块和刻度盘之间没有真正的区别。 它们共享相同的信号,插槽和成员功能。 您使用哪一个取决于您的用户期望和应用程序类型。

7.2.11.2 用法示例
例18_qdial车速表(难度:简单),使用一个QDial,以一个QLabel,演示QDial的用法。当程序初始化界面后,拖动滑块的位置,label则会显示dial的值。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
image088.jpg

在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码
  2. 1   #ifndef MAINWINDOW_H
  3. 2   #define MAINWINDOW_H
  4. 3
  5. 4   #include <QDial>
  6. 5   #include <QLabel>
  7. 6   #include <QMainWindow>
  8. 7
  9. 8   class MainWindow : public QMainWindow
  10. 9   {
  11. 10      Q_OBJECT
  12. 11
  13. 12  public:
  14. 13      MainWindow(QWidget *parent = nullptr);
  15. 14      ~MainWindow();
  16. 15
  17. 16  private:
  18. 17      /* 声明对象 */
  19. 18      QDial *dial;
  20. 19      QLabel *label;
  21. 20
  22. 21  private slots:
  23. 22      /* 槽函数 */
  24. 23      void dialValueChanged(int);
  25. 24
  26. 25  };
  27. 26  #endif // MAINWINDOW_H
复制代码
在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   MainWindow::MainWindow(QWidget *parent)
  5. 4       : QMainWindow(parent)
  6. 5   {
  7. 6       /* 设置主窗体的位置与大小 */
  8. 7       this->setGeometry(0, 0, 800, 480);
  9. 8
  10. 9       /* 实例化对象和设置显示位置与大小 */
  11. 10      dial = new QDial(this);
  12. 11      dial->setGeometry(300, 100, 200, 200);
  13. 12
  14. 13      /* 设置页长(两个最大刻度的间距)*/
  15. 14      dial->setPageStep(10);
  16. 15
  17. 16      /* 设置刻度可见 */
  18. 17      dial->setNotchesVisible(true);
  19. 18
  20. 19      /* 设置两个凹槽之间的目标像素数 */
  21. 20      dial->setNotchTarget(1.00);
  22. 21
  23. 22      /* 设置dial值的范围 */
  24. 23      dial->setRange(0,100);
  25. 24
  26. 25      /* 开启后可指向圆的任何角度 */
  27. 26      //dial->setWrapping(true);
  28. 27
  29. 28      /* 实例化对象和设置显示位置与大小 */
  30. 29      label = new QLabel(this);
  31. 30      label->setGeometry(370, 300, 200, 50);
  32. 31
  33. 32      /* 初始化为0km/h */
  34. 33      label->setText("0km/h");
  35. 34
  36. 35      /* 信号槽连接 */
  37. 36      connect(dial, SIGNAL(valueChanged(int)),
  38. 37              this, SLOT(dialValueChanged(int)));
  39. 38  }
  40. 39
  41. 40  MainWindow::~MainWindow()
  42. 41  {
  43. 42  }
  44. 43
  45. 44  void MainWindow::dialValueChanged(int val)
  46. 45  {
  47. 46      /* QString::number()转换成字符串 */
  48. 47      label->setText(QString::number(val) + "km/h");
  49. 48  }
复制代码
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   #include <QApplication>
  5. 4
  6. 5   int main(int argc, char *argv[])
  7. 6   {
  8. 7       QApplication a(argc, argv);
  9. 8       MainWindow w;
  10. 9       w.show();
  11. 10      return a.exec();
  12. 11  }
复制代码
7.2.11.3 运行效果
       程序编译运行的结果如下,当程序初始化时,QDial控件的显示如下(注意,windows下QDial控件显示的格式可能不一样,下图为linux下的QDial控件的显示样式)。当用鼠标拖动滑块或者按键盘的上下左右方向键时,label则会显示当前“车速”。
image090.jpg
       QDial在很多场合都能使用,比如音量控制,汽车仪表盘,芝麻信用分等场合都可以使用到,只是需要我们有这个创意和想法,还需要个人的美工基础。

7.2.12 QScrollBar
7.2.12.1 控件简介
QScrollBar继承QAbstractSlider。QScrollBar小部件提供垂直或水平滚动条,允许用户访问比用于显示文档的小部件大的文档部分。它提供了用户在文档中的当前位置和可见文档数量的可视化指示。滚动条通常配有其他控件,可以实现更精确的导航(这里指浏览到精确的位置)。

7.2.12.2 用法示例
例19_qscrollbar创建水平和垂直滚动条(难度:简单),使用QScrollBar类实例化两个控件,一个是水平滚动条,另一个是垂直滚动条,中间用一个标签文本来显示。(本例只创建实例,不对效果进行细化(请注意:一般水平或垂直滚动条都用QScrollArea搭配其他控件使用,不单独使用QScrollBar去创建滚动条,有些控件“自带”滚动条,例如QListWidget等,都可以用QScrollArea来设置它的属性)。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
image092.jpg

在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码
  2. 1   #ifndef MAINWINDOW_H
  3. 2   #define MAINWINDOW_H
  4. 3
  5. 4   #include <QMainWindow>
  6. 5   #include <QScrollBar>
  7. 6   #include <QLabel>
  8. 7
  9. 8   class MainWindow : public QMainWindow
  10. 9   {
  11. 10      Q_OBJECT
  12. 11
  13. 12  public:
  14. 13      MainWindow(QWidget *parent = nullptr);
  15. 14      ~MainWindow();
  16. 15
  17. 16  private:
  18. 17      /* 声明水平滚动条对象 */
  19. 18      QScrollBar *horizontalScrollBar;
  20. 19
  21. 20      /* 声明垂直滚动条对象 */
  22. 21      QScrollBar *verticalScrollBar;
  23. 22
  24. 23      /* 声明标签文本 */
  25. 24      QLabel *label;
  26. 25  };
  27. 26  #endif // MAINWINDOW_H
复制代码
在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   MainWindow::MainWindow(QWidget *parent)
  5. 4       : QMainWindow(parent)
  6. 5   {
  7. 6       /* 设置主窗体大小,位置 */
  8. 7       this->setGeometry(0,0,800,480);
  9. 8
  10. 9       /* 实例化水平滚动条及设置位置大小 */
  11. 10      horizontalScrollBar = new QScrollBar(Qt::Horizontal, this);
  12. 11      horizontalScrollBar->setGeometry(0, 450, 800, 30);
  13. 12
  14. 13      /* 实例化垂直滚动条及设置位置大小 */
  15. 14      verticalScrollBar = new QScrollBar(Qt::Vertical, this);
  16. 15      verticalScrollBar->setGeometry(770, 0, 30, 480);
  17. 16
  18. 17      /* 实例化,标签文本 */
  19. 18      label = new QLabel(this);
  20. 19      /* 设置文本 */
  21. 20      label->setText("这是一个测试");
  22. 21      /* 设置位置大小 */
  23. 22      label->setGeometry(300, 200, 100, 20);
  24. 23  }
  25. 24
  26. 25  MainWindow::~MainWindow()
  27. 26  {
  28. 27  }
复制代码
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   #include <QApplication>
  5. 4
  6. 5   int main(int argc, char *argv[])
  7. 6   {
  8. 7       QApplication a(argc, argv);
  9. 8       MainWindow w;
  10. 9       w.show();
  11. 10      return a.exec();
  12. 11  }
复制代码
7.2.12.3 运行效果
       程序编译运行的结果。如下当程序初始化时,滚动条控件的显示如下(注意,windows下滚动条控件显示的格式可能不一样,下图为linux下的滚动条控件的显示样式)。
image094.jpg

7.2.13 QSlider7.2.13.1 控件简介
QSlider继承QAbstractSlider。QScrollBar类提供垂直或水平滑动条小部件,滑动条是用于控制有界值的典型小部件。它允许用户沿着水平或垂直凹槽移动滑块手柄,并将手柄的位置转换为合法范围内的整数值。
7.2.13.2 用法示例
例20_qslider创建水平和垂直滑动条(难度:简单)创建两个QSlider对象,一个是水平滑动条,另一个是垂直滑动条;用一个Label来显示当前水平或垂直滑动条当前的值。设置水平滑动条与水平滑动条相互关联,通过滑动其中一个滑动条的值相应的也会改变另一个滑动条的值。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。
. image096.jpg
在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码

  2. 1   #ifndef MAINWINDOW_H

  3. 2   #define MAINWINDOW_H

  4. 3

  5. 4   #include <QMainWindow>

  6. 5   #include <QSlider>

  7. 6   #include <QLabel>

  8. 7

  9. 8   class MainWindow : public QMainWindow

  10. 9   {

  11. 10      Q_OBJECT

  12. 11

  13. 12  public:

  14. 13      MainWindow(QWidget *parent = nullptr);

  15. 14      ~MainWindow();

  16. 15

  17. 16  private:

  18. 17      /* 声明对象 */

  19. 18      QSlider *horizontalSlider;

  20. 19      QSlider *verticalSlider;

  21. 20      QLabel *label;

  22. 21  private slots:

  23. 22      /* 槽函数 */

  24. 23      void horizontalSliderValueChanged(int);

  25. 24      void verticalSliderValueChanged(int);

  26. 25

  27. 26  };

  28. 27  #endif // MAINWINDOW_H
复制代码
在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码

  2. 1   #include "mainwindow.h"

  3. 2

  4. 3   MainWindow::MainWindow(QWidget *parent)

  5. 4       : QMainWindow(parent)

  6. 5   {

  7. 6       this->setGeometry(0, 0, 800, 480);

  8. 7

  9. 8       /* 实例化水平滑动条对象*/

  10. 9       horizontalSlider = new QSlider(Qt::Horizontal, this);

  11. 10

  12. 11      /* 设置显示的位置与大小 */

  13. 12      horizontalSlider->setGeometry(250, 100, 200, 20);

  14. 13

  15. 14      /* 设置值范围 */

  16. 15      horizontalSlider->setRange(0, 100);

  17. 16

  18. 17      /* 实例化垂直滑动条对象 */

  19. 18      verticalSlider = new QSlider(Qt::Vertical, this);

  20. 19

  21. 20      /* 设置显示的位置与大小 */

  22. 21      verticalSlider->setGeometry(200, 50, 20, 200);

  23. 22

  24. 23      /* 设置值范围 */

  25. 24      verticalSlider->setRange(0, 100);

  26. 25

  27. 26      /* 实例化标签文本 */

  28. 27      label = new QLabel("滑动条值:0", this);

  29. 28      label->setGeometry(250, 200, 100, 20);

  30. 29

  31. 30      /* 信号槽连接 */

  32. 31      connect(horizontalSlider, SIGNAL(valueChanged(int)),

  33. 32              this, SLOT(horizontalSliderValueChanged(int)));

  34. 33      connect(verticalSlider, SIGNAL(valueChanged(int)),

  35. 34              this, SLOT(verticalSliderValueChanged(int)));

  36. 35

  37. 36  }

  38. 37

  39. 38  MainWindow::~MainWindow()

  40. 39  {

  41. 40  }

  42. 41

  43. 42  void MainWindow::horizontalSliderValueChanged(int val)

  44. 43  {

  45. 44      /* 当水平滑动条的值改变时,改变垂直滑动条的值 */

  46. 45      verticalSlider->setSliderPosition(val);

  47. 46

  48. 47      /* 将int类型转变成字符 */

  49. 48

  50. 49      QString str = "滑动条值:" + QString::number(val);

  51. 50

  52. 51      /* 显示当前垂直或水平滑动条的值 */

  53. 52      label->setText(str);

  54. 53

  55. 54  }

  56. 55

  57. 56  void MainWindow::verticalSliderValueChanged(int val)

  58. 57  {

  59. 58      /* 当垂直滑动条的值改变时,改变水平滑动条的值 */

  60. 59      horizontalSlider->setSliderPosition(val);

  61. 60  }
复制代码
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码

  2. 1   #include "mainwindow.h"

  3. 2

  4. 3   #include <QApplication>

  5. 4

  6. 5   int main(int argc, char *argv[])

  7. 6   {

  8. 7       QApplication a(argc, argv);

  9. 8       MainWindow w;

  10. 9       w.show();

  11. 10      return a.exec();

  12. 11  }
复制代码
7.2.13.3 运行效果
       程序编译运行的结果如下。当程序初始化时,滑动条控件的显示如下(注意,windows下滑动条控件显示的格式可能不一样,下图为linux下的滑动条控件的显示样式)。Label显示的初始值为0,当拖动任意一个滑动条来改变当前的值,另一个滑动条的值也在变。
image098.jpg ]
7.2.14 QKeySequenceEdit
7.2.14.1 控件简介
QKeySequenceEdit继承QWidget。这个小部件允许用户选择QKeySequence, QKeySequence通常用作快捷方式。当小部件接收到焦点并在用户释放最后一个键后一秒结束时,将启动记录,通常用作记录快捷键。

7.2.14.2 用法示例
例21_qkeysequenceedit自定义快捷键(难度:简单),通常KeySequenceEdit控件记录快捷键后与Qt键盘事件搭配来使用,由于教程后面才说到事件,所以先不与Qt键盘事件搭配使用。下面使用一个QKeySequenceEdit控件,然后判断输入的组合键是否为Ctrl + Q,若是,则关闭窗口,退出程序,如果不是,则继续更新记录组合键。
在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。
  1. mainwindow.h编程后的代码
  2. 1   #ifndef MAINWINDOW_H
  3. 2   #define MAINWINDOW_H
  4. 3
  5. 4   #include <QMainWindow>
  6. 5   #include <QKeySequenceEdit>
  7. 6
  8. 7   class MainWindow : public QMainWindow
  9. 8   {
  10. 9       Q_OBJECT
  11. 10
  12. 11  public:
  13. 12      MainWindow(QWidget *parent = nullptr);
  14. 13      ~MainWindow();
  15. 14
  16. 15  private:
  17. 16      /* 声明QKeySequenceEdit对象 */
  18. 17      QKeySequenceEdit  *keySequenceEdit;
  19. 18
  20. 19  private slots:
  21. 20      /* 声明槽 */
  22. 21      void KSEKeySequenceChanged(const QKeySequence &);
  23. 22
  24. 23  };
  25. 24  #endif // MAINWINDOW_H
复制代码
在源文件“mainwindow.cpp”具体代码如下。
  1. mainwindow.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2   #include <QDebug>
  4. 3
  5. 4   MainWindow::MainWindow(QWidget *parent)
  6. 5       : QMainWindow(parent)
  7. 6   {
  8. 7       /* 主窗体设置位置与大小 */
  9. 8       this->setGeometry(0, 0, 800, 480);
  10. 9      
  11. 10      /* 实例化 */
  12. 11      keySequenceEdit = new QKeySequenceEdit(this);
  13. 12     
  14. 13      /* 设置位置与大小 */
  15. 14      keySequenceEdit->setGeometry(350, 200, 150, 30);
  16. 15     
  17. 16      /* 信号槽连接 */
  18. 17      connect(keySequenceEdit,
  19. 18              SIGNAL(keySequenceChanged(const QKeySequence &)),
  20. 19              this,
  21. 20              SLOT(KSEKeySequenceChanged(const QKeySequence &))
  22. 21              );
  23. 22     
  24. 23  }
  25. 24
  26. 25  MainWindow::~MainWindow()
  27. 26  {
  28. 27  }
  29. 28
  30. 29  void MainWindow::KSEKeySequenceChanged(
  31. 30          const QKeySequence &keySequence)
  32. 31  {
  33. 32      /* 判断输入的组合键是否为Ctrl + Q,如果是则退出程序 */
  34. 33      if(keySequence == QKeySequence(tr("Ctrl+Q"))) {
  35. 34          /* 结束程序 */
  36. 35          this->close();
  37. 36      }else {
  38. 37          /* 打印出按下的组合键 */
  39. 38          qDebug()<<keySequence.toString()<<endl;
  40. 39      }
  41. 40  }
复制代码
在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。
  1. main.cpp编程后的代码
  2. 1   #include "mainwindow.h"
  3. 2
  4. 3   #include <QApplication>
  5. 4
  6. 5   int main(int argc, char *argv[])
  7. 6   {
  8. 7       QApplication a(argc, argv);
  9. 8       MainWindow w;
  10. 9       w.show();
  11. 10      return a.exec();
  12. 11  }
复制代码
7.2.14.3 运行效果
       程序编译运行的结果如下。(注意Windows下显示效果可能不同,下图为linux下运行的结果),当焦点在KeySequenceEdit里时,按下键盘里的任一键或者组合键,一秒后,KeySequenceEdit将记录了这个/这组组合键,并打印在输出信息里。直到程序按下Ctrl + Q组合键后,程序窗口才关闭,结束。
image102.jpg





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-8 09:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表