专业的编程技术博客社区

网站首页 > 博客文章 正文

正点原子I.MX6U嵌入式Qt开发指南:第七章《Qt控件 2》

baijin 2024-10-24 08:50:56 博客文章 17 ℃ 0 评论

今日头条/西瓜视频/抖音短视频 同名:正点原子

感谢各位的关注和支持,你们的关注和支持是正点原子无限前进的动力。

第七章《Qt控件 2》

由于本章内容较多,所以第七章《Qt控件》将会分为几个部分进行内容的发布,更多文章内容请持续关注今日头条正点原子官方账号。

7.2.1 QComboBox

7.2.1.1控件简介

QComboBox类提供了Qt下拉组合框的组件。

7.2.1.2用法示例

例10_qcombobox,选择省份(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。

在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。

mainwindow.h编程后的代码

1   #ifndef MAINWINDOW_H

2   #define MAINWINDOW_H

3 

4   #include <QMainWindow>

5   /* 引入QDialogButtonBox */

6   #include <QDialogButtonBox>

7   /* 引入QPuhsButton */

8   #include <QPushButton>

9 

10  class MainWindow : public QMainWindow

11  {

12      Q_OBJECT

13

14  public:

15      MainWindow(QWidget *parent = nullptr);

16      ~MainWindow();

17

18  private:

19      /* 声明一个QDialogButtonBox对象 */

20      QDialogButtonBox *dialogButtonBox;

21

22      /* 声明一个QDialogButtonBox对象 */

23      QPushButton *pushButton;

24

25  private slots:

26      /* 声明信号槽,带QAbstractButton *参数,用于判断点击了哪个按钮 */

27      void dialogButtonBoxClicked(QAbstractButton *);

28

29  };

30  #endif // MAINWINDOW_H

第18行,声明一个QDialogButtonBox对象。

在源文件“mainwindow.cpp”具体代码如下。

mainwindow.cpp编程后的代码

1   #include "mainwindow.h"

2   /* 引入QDebug */

3   #include <QDebug>

4 

5   MainWindow::MainWindow(QWidget *parent)

6       : QMainWindow(parent)

7   {

8       /* 设置主窗体的显示位置与大小 */

9       this->setGeometry(0, 0, 800, 480);

10

11      /* 实例化对象 */

12      comboBox = new QComboBox(this);

13

14      /* 设置comboBox的显示位置与大小 */

15      comboBox->setGeometry(300, 200, 150, 30);

16

17      /* 添加项,我们添加三个省份,作为comboBox的三个选项 */

18      comboBox->addItem("广东(默认)");

19      comboBox->addItem("湖南");

20      comboBox->addItem("四川");

21

22      /* 信号槽连接 */

23      connect(comboBox, SIGNAL(currentIndexChanged(int)), this,

24              SLOT(comboBoxIndexChanged(int)));

25  }

26

27  MainWindow::~MainWindow()

28  {

29  }

30

31  void MainWindow::comboBoxIndexChanged(int index)

32  {

33      /* 打印出选择的省份 */

34      qDebug()<<"您选择的省份是"<< comboBox->itemText(index)<<endl;

35  }

第18至20行,添加Item,也就是项。

第30至34行,当点击下拉列表改变选择的省份就会触发currentIndexChanged(int)这个信号,就会相应打印项的省份名称。

在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。

main.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   #include <QApplication>

4 

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

6   {

7       QApplication a(argc, argv);

8       MainWindow w;

9       w.show();

10      return a.exec();

11  }

7.2.1.3运行效果

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

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

QComboBox我们常会在一些需要下拉列表选择的项目中用到。比如QQ登录如果有多个帐号选择就需要这个QComboBox。

7.2.2QFontComboBox

7.2.2.1控件简介

QFontComboBox类提供了下拉选择字体系列的组合框小部件。

7.2.2.2用法示例

例11_qfontcombobox,字体选择(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。

在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。

mainwindow.h编程后的代码

1   #ifndef MAINWINDOW_H

2   #define MAINWINDOW_H

3 

4   #include <QMainWindow>

5   /* 引入QFontComboBox */

6   #include <QFontComboBox>

7   /* 引入QLable */

8   #include <QLabel>

9 

10  class MainWindow : public QMainWindow

11  {

12      Q_OBJECT

13      

14  public:

15      MainWindow(QWidget *parent = nullptr);

16      ~MainWindow();

17      

18  private:

19      /* 声明一个QFontComboBox对象 */

20      QFontComboBox *fontComboBox;

21      /* 声明一个Label对象,用于显示当前字体变化 */

22      QLabel *label;

23      

24  private slots:

25      /* 声明QFontComboBox对象使用的槽函数 */

26      void fontComboBoxFontChanged(QFont);

27      

28  };

29  #endif // MAINWINDOW_H

第20行,声明一个QFontComboBox对象。

在源文件“mainwindow.cpp”具体代码如下。

mainwindow.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   MainWindow::MainWindow(QWidget *parent)

4       : QMainWindow(parent)

5   {

6       /* 设置主窗体的显示位置和大小 */

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

8 

9       /* 实例化对象 */

10      fontComboBox = new QFontComboBox(this);

11      label = new QLabel(this);

12

13      /* 设置显示的位置与大小 */

14      fontComboBox->setGeometry(280, 200, 200, 30);

15      label->setGeometry(280, 250, 300, 50);

16

17      /* 信号与槽连接 */

18      connect(fontComboBox, SIGNAL(currentFontChanged(QFont)), this,

19              SLOT(fontComboBoxFontChanged(QFont)));

20  }

21

22  MainWindow::~MainWindow()

23  {

24  }

25

26  /* 槽函数实现 */

27  void MainWindow::fontComboBoxFontChanged(QFont font)

28  {

29      /* 将label里的文本内容设置为所选择的字体 */

30      label->setFont(font);

31

32      /* 定义一个字符串接收当前项的字体 */

33      QString str = "用此标签显示字体效果\n设置的字体为:" +

34              fontComboBox->itemText(fontComboBox->currentIndex());

35

36      /* 将字符串的内容作为label的显示内容 */

37      label->setText(str);

38  }

第27至37行,当选择的字体改变时,槽函数就会设置label的字体,并打印当前字体的名称。

在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。

main.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   #include <QApplication>

4 

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

6   {

7       QApplication a(argc, argv);

8       MainWindow w;

9       w.show();

10      return a.exec();

11  }

7.2.2.3运行效果

程序编译运行的结果如下,当点击FontCOmboBox字体组合框选择字体后,Label标签显示的字体将改变为当前所选择的字体。(注意Ubuntu与Windows的字体不一样,所以显示的效果有可能不一样,下图为Ubuntu的字体显示效果)

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

7.2.3QLineEdit

7.2.3.1控件简介

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

7.2.3.2用法示例

例12_qlineedit,单行输入框(难度:简单),通过点击下拉按钮的项,选择其中一项,然后打印出当前选择项的内容。

在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。


在头文件“mainwindow.h”具体代码如下。像引入头文件,设置主窗体大小位置和实例化对象这种注释我们慢慢淡化,不再写详细注释了。读者看了前面的对这种设置已经很清楚了。

mainwindow.h编程后的代码

1   #ifndef MAINWINDOW_H

2   #define MAINWINDOW_H

3 

4   #include <QMainWindow>

5   #include <QLineEdit>

6   #include <QPushButton>

7   #include <QLabel>

8 

9   class MainWindow : public QMainWindow

10  {

11      Q_OBJECT

12      

13  public:

14      MainWindow(QWidget *parent = nullptr);

15      ~MainWindow();

16  private:

17      /* 声明一个QLineEdit对象 */

18      QLineEdit *lineEdit;

19      

20      /* 声明一个QPushButton对象 */

21      QPushButton *pushButton;

22      

23      /* 声明一个QLabel对象 */

24      QLabel *label;

25      

26  private slots:

27      /* 声明一个槽函数,响应pushButton的clicked事件 */

28      void pushButtonClicked();

29  };

30  #endif // MAINWINDOW_H

在源文件“mainwindow.cpp”具体代码如下。

mainwindow.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   MainWindow::MainWindow(QWidget *parent)

4       : QMainWindow(parent)

5   {

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

7 

8       lineEdit = new QLineEdit(this);

9       lineEdit->setGeometry(280, 200, 200, 20);

10

11      pushButton = new QPushButton(this);

12      pushButton->setGeometry(500, 200, 50, 20);

13      pushButton->setText("确认");

14

15      label = new QLabel(this);

16      label->setGeometry(280, 250, 400, 20);

17      label->setText("您输入的内容是:");

18

19      /* 信号槽连接 */

20      connect(pushButton,SIGNAL(clicked()), this,

21              SLOT(pushButtonClicked()));

22  }

23

24  MainWindow::~MainWindow()

25  {

26  }

27

28  void MainWindow::pushButtonClicked()

29  {

30      /* 字符串变量str */

31      QString str;

32

33      str = "您输入的内容是:";

34      str += lineEdit->text();

35

36      /* 设置label里的文本显示内容 */

37      label->setText(str);

38      /* 在点击了确认键之后清空lineEdit单行输入框 */

39      lineEdit->clear();

40  }

第28至40行,当我们在单选输入框里输入完成后,将输入的内容设置为在label的文本内容。

在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。

main.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   #include <QApplication>

4 

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

6   {

7       QApplication a(argc, argv);

8       MainWindow w;

9       w.show();

10      return a.exec();

11  }

7.2.3.3运行效果

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

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

7.2.4QTextEdit

7.2.4.1控件简介

QTextEdit类提供了一个查看器/编辑器小部件。

7.2.4.2用法示例

例13_qtextedit文本编辑框(难度:简单),用一个QTextEdit来演示文本的输入,用两个QPushButton来模拟文本编辑的全选与清除。在QTextEdit里也可用键盘的快捷键(如Ctrl+A)来完成全选,复制,粘贴等操作。Qt提供了全选,复制粘贴等这一类的函数方便用户操作,下面用简单的实例来演示。

在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。

mainwindow.h编程后的代码

1   #ifndef MAINWINDOW_H

2   #define MAINWINDOW_H

3   #include <QTextEdit>

4   #include <QPushButton>

5 

6   #include <QMainWindow>

7 

8   class MainWindow : public QMainWindow

9   {

10      Q_OBJECT

11

12  public:

13      MainWindow(QWidget *parent = nullptr);

14      ~MainWindow();

15

16  private:

17      /* 声明一个QTextEdit对象 */

18      QTextEdit *textEdit;

19

20      /* 声明两个QPushButton对象 */

21      QPushButton *pushButtonSelectAll;

22      QPushButton *pushButtonClearAll;

23

24  private slots:

25      /* 声明两个槽函数,响应按钮点击响应的事件 */

26      void pushButtonSelectAllClicked();

27      void pushButtonClearAllClicked();

28

29  };

30  #endif // MAINWINDOW_H

在源文件“mainwindow.cpp”具体代码如下。

mainwindow.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   MainWindow::MainWindow(QWidget *parent)

4       : QMainWindow(parent)

5   {

6       /* 设置主窗体显示的位置和大小 */

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

8 

9       /* 实例和对象,设置位置和显示大小 */

10      textEdit = new QTextEdit(this);

11      textEdit->setGeometry(0, 0, 800, 400);

12

13      /* 实例和对象,设置位置和显示大小,设置文本 */

14      pushButtonSelectAll = new QPushButton(this);

15      pushButtonSelectAll->setGeometry(200, 420, 50, 20);

16      pushButtonSelectAll->setText("全选");

17

18      /* 实例和对象,设置位置和显示大小,设置文本 */

19      pushButtonClearAll = new QPushButton(this);

20      pushButtonClearAll->setGeometry(500, 420, 50, 20);

21      pushButtonClearAll->setText("清除");

22

23      /* 信号槽连接 */

24      connect(pushButtonSelectAll, SIGNAL(clicked()), this,

25              SLOT(pushButtonSelectAllClicked()));

26      connect(pushButtonClearAll, SIGNAL(clicked()), this,

27              SLOT(pushButtonClearAllClicked()));

28

29  }

30

31  MainWindow::~MainWindow()

32  {

33  }

34

35  void MainWindow::pushButtonSelectAllClicked()

36  {

37      /* 设置焦点为textEdit */

38      textEdit->setFocus();

39      /* 判断文本编辑框内容是否为空,不为空则全选 */

40      if(!textEdit->toPlainText().isEmpty()){

41          /* 全选 */

42          textEdit->selectAll();

43      }

44  }

45

46  void MainWindow::pushButtonClearAllClicked()

47  {

48      /* 清空textEdit里的文本内容 */

49      textEdit->clear();

50  }

51

第35至49行,当我们在文本输入框里输入完成后,当点击全选按钮后,需要设置焦点到textEdit上,否则将不能设置全选。

在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。

main.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   #include <QApplication>

4 

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

6   {

7       QApplication a(argc, argv);

8       MainWindow w;

9       w.show();

10      return a.exec();

11  }

7.2.4.3运行效果

程序编译运行的结果如下,在编辑框里输入文字后,点击按钮全选,点击清除则清除编辑框内的全部内容。如下图为点击全选的效果。

7.2.5QPlainTextEdit

7.2.5.1控件简介

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

7.2.5.2用法示例

例14_qplaintextedit文本浏览编辑器(难度:简单),用一个QPlainTextEdit来读取本当前工程里的一个文件,并用一个RadioButton里将QPlainTextEdit设为只读。

在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。

mainwindow.h编程后的代码

1   #ifndef MAINWINDOW_H

2   #define MAINWINDOW_H

3 

4   #include <QPlainTextEdit>

5   #include <QRadioButton>

6 

7   #include <QMainWindow>

8 

9   class MainWindow : public QMainWindow

10  {

11      Q_OBJECT

12

13  public:

14      MainWindow(QWidget *parent = nullptr);

15      ~MainWindow();

16

17  private:

18      /* 声明对象 */

19      QPlainTextEdit *plainTextEdit;

20      QRadioButton *radioButton;

21

22  private slots:

23      /* 槽函数 */

24      void radioButtonClicked();

25

26  };

27  #endif // MAINWINDOW_H

在源文件“mainwindow.cpp”具体代码如下。

mainwindow.cpp编程后的代码

1   #include "mainwindow.h"

2   #include <QDir>

3   #include <QTextStream>

4   #include <QCoreApplication>

5 

6   MainWindow::MainWindow(QWidget *parent)

7       : QMainWindow(parent)

8   {

9       /* 设置当前程序的工作目录为可执行程序的工作目录 */

10      QDir::setCurrent(QCoreApplication::applicationDirPath());

11

12      this->setGeometry(0, 0, 800, 480);

13

14      plainTextEdit = new QPlainTextEdit(this);

15      plainTextEdit->setGeometry(0, 50, 800, 430);

16

17      radioButton = new QRadioButton(this);

18      radioButton->setGeometry(650, 20, 100, 20);

19      radioButton->setText("只读模式");

20

21      /* 打开可执行程序目录里的moc_mainwindow.cpp,注意如果是Windows下

22     moc_mainwindow.cpp并不在当前目录,而在上一级目录"../moc_mainwindow.cpp"*/

23      QFile file("moc_mainwindow.cpp");

24

25      /* 以只读模式打开,但是可以在plainTextEdit里编辑 */

26      file.open((QFile::ReadOnly | QFile::Text));

27

28      /* 加载到文件流 */

29      QTextStream in(&file);

30

31      /* 从文本流中读取全部 */

32      plainTextEdit->insertPlainText(in.readAll());

33

34      /* 信号槽连接 */

35      connect(radioButton, SIGNAL(clicked()), this,

36              SLOT(radioButtonClicked()));

37

38  }

39

40  MainWindow::~MainWindow()

41  {

42  }

43

44  void MainWindow::radioButtonClicked()

45  {

46      /* 检查radioButton是否选中 */

47      if(radioButton->isChecked()) {

48          /* 设置为只读模式 */

49          plainTextEdit->setReadOnly(true);

50      } else {

51          /* 设置为非只读模式 */

52          plainTextEdit->setReadOnly(false);

53      }

54  }

第44和54行,检查radioButton是否选中。

在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。

main.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   #include <QApplication>

4 

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

6   {

7       QApplication a(argc, argv);

8       MainWindow w;

9       w.show();

10      return a.exec();

11  }

7.2.5.3运行效果

程序编译运行的结果如下,当程序正常运行后会打开程序当前路径下的” moc_mainwindow.cpp”文件,(注意在Windows下moc_mainwindow.cpp应该写成”../ moc_mainwindow.cpp”),且在QPlainTextEdit编辑框下是可编辑的,当选中程序界面上的只读模式时,QPlainTextEdit编辑框就不可以再编辑。相反可以取消只读模式则可以再编辑。

有了QTextEdit,为什么还有QPlainTextEdit?QPlainTextEdit 可以理解为 QTextEdit的低配版。QPlainTextEdit支持纯文本显示,QTextEdit支持富文本(支持多种格式,比如插入图片,链接等)显示。就是多一个样式。QPlainTextEdit显示的效率比QTextEdit高,如果需要显示大量文字,尤其是需要滚动条来回滚动的时候,QPlainTextEdit要好很多。

7.2.6QSpinBox

7.2.6.1控件简介

QSpinBox类提供了一个微调框小部件。

7.2.6.2用法示例

例15_qspinbox窗口背景不透明调节器(难度:简单),用一个QSpinBox来调节程序窗体的整体不透明度。

在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。

mainwindow.h编程后的代码

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

 

#include <QMainWindow>

#include <QSpinBox>

 

class MainWindow : public QMainWindow

{

    Q_OBJECT

 

public:

    MainWindow(QWidget *parent = nullptr);

    ~MainWindow();

 

private:

    /* 声明一个QSpinBox对象 */

    QSpinBox *spinBox;

private slots:

    /* 槽函数 */

    void spinBoxValueChanged(int);

};

#endif // MAINWINDOW_H

在源文件“mainwindow.cpp”具体代码如下。

mainwindow.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   MainWindow::MainWindow(QWidget *parent)

4       : QMainWindow(parent)

5   {

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

7 

8       /* 设置主窗口背景颜色,rgb颜色标准,a代表不透明度(0~100)*/

9       this->setStyleSheet("QMainWindow{background-color: "

10                          "rgba(100, 100, 100, 100%) }");

11

12      spinBox = new QSpinBox(this);

13      spinBox->setGeometry(350, 200, 150, 30);

14

15      /* 设置范围0~100 */

16      spinBox->setRange(0, 100);

17

18      /* 设置步长为10 */

19      spinBox->setSingleStep(10);

20

21      /* 设置初始值为100 */

22      spinBox->setValue(100);

23

24      /* 设置后缀 */

25      spinBox->setSuffix("%不透明度");

26

27      /* 信号槽连接 */

28      connect(spinBox,SIGNAL(valueChanged(int)), this,

29              SLOT(spinBoxValueChanged(int)));

30  }

31

32  MainWindow::~MainWindow()

33  {

34  }

35

36  void MainWindow::spinBoxValueChanged(int opacity)

37  {

38      /* 转换为double数据类型 */

39      double  dobleopacity = (double)opacity / 100;

40

41      /* 设置窗体不透明度,范围是0.0~1.0。1则为不透明,0为全透明 */

42      this->setWindowOpacity(dobleopacity);

43  }

7.2.6.3运行效果

程序编译运行的结果如下,程序初始化界面时是全不透明,不透明度值为100%,当点击向下调节SpinBox后,整个窗体的不透明将会变小。当不透明度地值变小时,窗口将透明化。

7.2.7QDoubleSpinBox

7.2.7.1控件简介

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

7.2.7.2用法示例

例16_qdoublespinbox窗口大小调节器(难度:简单),用一个QDoubleSpinBox来调节程序窗口的整体大小。

在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。

mainwindow.h编程后的代码

1   #ifndef MAINWINDOW_H

2   #define MAINWINDOW_H

3 

4   #include <QMainWindow>

5   #include <QDoubleSpinBox>

6 

7   class MainWindow : public QMainWindow

8   {

9       Q_OBJECT

10

11  public:

12      MainWindow(QWidget *parent = nullptr);

13      ~MainWindow();

14

15  private:

16      /* 声明一个QDoubleSpinBox对象 */

17      QDoubleSpinBox *doubleSpinBox;

18

19  private slots:

20      /* 槽函数 */

21      void doubleSpinBoxValueChanged(double);

22

23  };

24  #endif // MAINWINDOW_H

在源文件“mainwindow.cpp”具体代码如下。

mainwindow.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   MainWindow::MainWindow(QWidget *parent)

4       : QMainWindow(parent)

5   {

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

7 

8       /* 实例化和设置显示的位置与大小 */

9       doubleSpinBox = new QDoubleSpinBox(this);

10      doubleSpinBox->setGeometry((this->width() - 200) / 2,

11                                 (this->height() - 30) / 2,

12                                 200, 30);

13      /* 设置前缀 */

14      doubleSpinBox->setPrefix("窗口大小");

15

16      /* 设置后缀 */

17      doubleSpinBox->setSuffix("%");

18

19      /* 设置范围 */

20      doubleSpinBox->setRange(50.00, 100.00);

21

22      /* 设置初始值 */

23      doubleSpinBox->setValue(100.00);

24

25      /* 设置步长 */

26      doubleSpinBox->setSingleStep(0.1);

27

28      /* 信号槽连接 */

29      connect(doubleSpinBox, SIGNAL(valueChanged(double)),

30              SLOT(doubleSpinBoxValueChanged(double)));

31

32  }

33

34  MainWindow::~MainWindow()

35  {

36  }

37

38  void MainWindow::doubleSpinBoxValueChanged(double value)

39  {

40      /* 重新计算窗口的宽与高 */

41      int w = 800 * value / 100;

42      int h = 480 * value / 100;

43

44      /* 重新设置窗口的宽与高 */

45      this->setGeometry(0, 0, w, h);

46

47      /* 重新设置doubleSpinBox的显示位置 */

48      doubleSpinBox->setGeometry((this->width() - 200) / 2,

49                                 (this->height() - 30) / 2,

50                                 200, 30);

51

52  }

第35至49行,重新设置主窗体的宽高和doubleSpinBox的显示位置。

在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。

main.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   #include <QApplication>

4 

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

6   {

7       QApplication a(argc, argv);

8       MainWindow w;

9       w.show();

10      return a.exec();

11  }

7.2.7.3运行效果

程序编译运行的结果如下,程序初始化界面窗口大小值为100%,当点击向下调节QDoubleSpinBox时,整个窗体将按QDoubleSpinBox里数值的比例缩小,最小为50.00%,相反当点击向上调节QDoubleSpinBox时,窗口大小将整体变大,最大为100.00%。

7.2.8 QTimeEdit

7.2.8.1控件简介

QTimeEdit类提供一个基于QDateTimeEdit类编辑时间的小部件。例在7.2.10小节

7.2.9QDateEdit

7.2.9.1控件简介

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

7.2.10QDateTimeEdit

7.2.10.1控件简介

从名字可知QDateTimeEdit类提供了一个用于编辑日期和时间的小部件。QDateTimeEdit允许用户使用键盘或箭头键编辑日期,以增加或减少日期和时间值。箭头键可用于在QDateTimeEdit框中从一个区域移动到另一个区域。实际上是QDateTimeEdit和QDateEdit的组合。

7.2.10.2用法示例

例17_qdatetimeedit时间日期展示(难度简单),使用一个QDateTimeEdit,一个QTimeEdit以及一个QDateEdit,传入当前系统时间与日期,展示简单的日期时间控件使用方法。

在新建例程中不要勾选“Generate form”,默认继承QMainWindow类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。

mainwindow.h编程后的代码

1   #ifndef MAINWINDOW_H

2   #define MAINWINDOW_H

3 

4   #include <QMainWindow>

5   #include <QDateTimeEdit>

6   #include <QTimeEdit>

7   #include <QDateEdit>

8 

9   class MainWindow : public QMainWindow

10  {

11      Q_OBJECT

12

13  public:

14      MainWindow(QWidget *parent = nullptr);

15      ~MainWindow();

16

17  private:

18      /* 声明对象 */

19      QDateTimeEdit *dateTimeEdit;

20      QTimeEdit *timeEdit;

21      QDateEdit *dateEdit;

22  };

23  #endif // MAINWINDOW_H

在源文件“mainwindow.cpp”具体代码如下。

mainwindow.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   MainWindow::MainWindow(QWidget *parent)

4       : QMainWindow(parent)

5   {

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

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

8 

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

10      dateTimeEdit = new QDateTimeEdit(

                       QDateTime::currentDateTime(),this);

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

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

13      //dateTimeEdit->setCalendarPopup(true);

14

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

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

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

18

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

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

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

22  }

23

24  MainWindow::~MainWindow()

25  {

26  }

在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。

main.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   #include <QApplication>

4 

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

6   {

7       QApplication a(argc, argv);

8       MainWindow w;

9       w.show();

10      return a.exec();

11  }

7.2.10.3运行效果

程序编译运行的结果如下,当程序初始化时,分别显示系统当前的时间与日期(注意,windows下Qt 程序显示的格式可能不一样,下图为linux下的Qt程序日期显示格式)。

7.2.11QDial

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类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。

mainwindow.h编程后的代码

1   #ifndef MAINWINDOW_H

2   #define MAINWINDOW_H

3 

4   #include <QDial>

5   #include <QLabel>

6   #include <QMainWindow>

7 

8   class MainWindow : public QMainWindow

9   {

10      Q_OBJECT

11

12  public:

13      MainWindow(QWidget *parent = nullptr);

14      ~MainWindow();

15

16  private:

17      /* 声明对象 */

18      QDial *dial;

19      QLabel *label;

20

21  private slots:

22      /* 槽函数 */

23      void dialValueChanged(int);

24

25  };

26  #endif // MAINWINDOW_H

在源文件“mainwindow.cpp”具体代码如下。

mainwindow.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   MainWindow::MainWindow(QWidget *parent)

4       : QMainWindow(parent)

5   {

6       /* 设置主窗体的位置与大小 */

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

8 

9       /* 实例化对象和设置显示位置与大小 */

10      dial = new QDial(this);

11      dial->setGeometry(300, 100, 200, 200);

12

13      /* 设置页长(两个最大刻度的间距)*/

14      dial->setPageStep(10);

15

16      /* 设置刻度可见 */

17      dial->setNotchesVisible(true);

18

19      /* 设置两个凹槽之间的目标像素数 */

20      dial->setNotchTarget(1.00);

21

22      /* 设置dial值的范围 */

23      dial->setRange(0,100);

24

25      /* 开启后可指向圆的任何角度 */

26      //dial->setWrapping(true);

27

28      /* 实例化对象和设置显示位置与大小 */

29      label = new QLabel(this);

30      label->setGeometry(370, 300, 200, 50);

31

32      /* 初始化为0km/h */

33      label->setText("0km/h");

34

35      /* 信号槽连接 */

36      connect(dial, SIGNAL(valueChanged(int)),

37              this, SLOT(dialValueChanged(int)));

38  }

39

40  MainWindow::~MainWindow()

41  {

42  }

43

44  void MainWindow::dialValueChanged(int val)

45  {

46      /* QString::number()转换成字符串 */

47      label->setText(QString::number(val) + "km/h");

48  }

在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。

main.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   #include <QApplication>

4 

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

6   {

7       QApplication a(argc, argv);

8       MainWindow w;

9       w.show();

10      return a.exec();

11  }

7.2.11.3运行效果

程序编译运行的结果如下,当程序初始化时,QDial控件的显示如下(注意,windows下QDial控件显示的格式可能不一样,下图为linux下的QDial控件的显示样式)。当用鼠标拖动滑块或者按键盘的上下左右方向键时,label则会显示当前“车速”。

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类即可。项目新建完成如下图。

在头文件“mainwindow.h”具体代码如下。

mainwindow.h编程后的代码

1   #ifndef MAINWINDOW_H

2   #define MAINWINDOW_H

3 

4   #include <QMainWindow>

5   #include <QScrollBar>

6   #include <QLabel>

7 

8   class MainWindow : public QMainWindow

9   {

10      Q_OBJECT

11

12  public:

13      MainWindow(QWidget *parent = nullptr);

14      ~MainWindow();

15

16  private:

17      /* 声明水平滚动条对象 */

18      QScrollBar *horizontalScrollBar;

19

20      /* 声明垂直滚动条对象 */

21      QScrollBar *verticalScrollBar;

22

23      /* 声明标签文本 */

24      QLabel *label;

25  };

26  #endif // MAINWINDOW_H

在源文件“mainwindow.cpp”具体代码如下。

mainwindow.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   MainWindow::MainWindow(QWidget *parent)

4       : QMainWindow(parent)

5   {

6       /* 设置主窗体大小,位置 */

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

8 

9       /* 实例化水平滚动条及设置位置大小 */

10      horizontalScrollBar = new QScrollBar(Qt::Horizontal, this);

11      horizontalScrollBar->setGeometry(0, 450, 800, 30);

12

13      /* 实例化垂直滚动条及设置位置大小 */

14      verticalScrollBar = new QScrollBar(Qt::Vertical, this);

15      verticalScrollBar->setGeometry(770, 0, 30, 480);

16

17      /* 实例化,标签文本 */

18      label = new QLabel(this);

19      /* 设置文本 */

20      label->setText("这是一个测试");

21      /* 设置位置大小 */

22      label->setGeometry(300, 200, 100, 20);

23  }

24

25  MainWindow::~MainWindow()

26  {

27  }

在源文件“main.cpp”具体代码如下。由新建项目时生成,无改动。

main.cpp编程后的代码

1   #include "mainwindow.h"

2 

3   #include <QApplication>

4 

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

6   {

7       QApplication a(argc, argv);

8       MainWindow w;

9       w.show();

10      return a.exec();

11  }

7.2.12.3运行效果

程序编译运行的结果。如下当程序初始化时,滚动条控件的显示如下(注意,windows下滚动条控件显示的格式可能不一样,下图为linux下的滚动条控件的显示样式)。

本章未完待续......

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表