十二、输入组控件InputWidget

十二、输入组控件InputWidget

12.1 编辑组合框QComboBox

QComboBox 以占用最少屏幕空间数量的方式,向用户提供呈现选项列表的手段。

组合框是显示当前项的选择 Widget,且可以弹出可选择项的列表。组合框可能是可编辑的,使用户能够修改每列表项。

组合框可以包含像素图及字符串; insertItem () 和 setItemText () 函数适合被重载。对于可编辑组合框,函数 clearEditText () 的提供以清零显示字符串无需改变组合框内容。

会发射 3 个信号若组合框当前项改变, currentIndexChanged (), currentTextChanged () 和 activated (). currentIndexChanged () 和 currentTextChanged () 始终发射,无论改变是通过编程方式还是通过用户交互完成,而 activated () 才被发射当通过用户交互导致改变时。 highlighted () 信号被发射当用户突显组合框弹出列表项时。所有 3 信号均有 2 个版本,一个带有 QString 自变量和一个带有 自变量。若用户选择或突显像素图,仅 信号被发射。每当可编辑组合框文本改变时 editTextChanged () 信号被发射。 int int

当用户在可编辑组合框中录入新字符串时,可能插入或可能不插入 Widget,且可以将 Widget 插入在多个位置。默认策略是 InsertAtBottom 但可以改变这使用 setInsertPolicy ().

可以将输入约束到可编辑组合框使用 QValidator ;见 setValidator ()。默认情况下,接受任何输入。

可以使用插入函数填充组合框, insertItem () 和 insertItems () 例如。可以改变项采用 setItemText ()。可以移除项采用 removeItem () 和可以移除所有项采用 clear ()。返回当前项文本通过 currentText (),并采用 text() 返回编号项的文本。可以设置当前项采用 setCurrentIndex ()。返回组合框的项数通过 count ();可以设置最大项数采用 setMaxCount ()。可以允许编辑使用 setEditable ()。对于可编辑组合框,可以设置自动补全使用 setCompleter () 和设置用户是否可以重复添加采用 setDuplicatesEnabled ().

QComboBox 使用 模型/视图框架 用于其弹出列表并存储其项。默认情况下 QStandardItemModel 存储项和 QListView 子类显示弹出列表。可以直接访问模型和视图 (采用 model () 和 view ()),但 QComboBox 还提供用来设置和获取项数据的函数 (如 setItemData () 和 itemText ())。还可以设置新的模型和视图 (采用 setModel () 和 setView ())。对于组合框标签文本和图标,模型数据拥有 Qt::D isplayRole and Qt::D ecorationRole 在使用。注意:不可以更改 SelectionMode 的 view (),如通过使用 setSelectionMode() .

创建一个QMainWindow工程。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    
    QComboBox *cb;
    
private slots:
    void comboboxIndex(int);
};
#endif // MAINWINDOW_H

mainwindow.cpp

首先添加两个项目。

    cb=new QComboBox(this);
    cb->setGeometry(10,10,200,30);
    cb->addItem("北京市");
    cb->addItem("上海市");

十二、输入组控件InputWidget_第1张图片

 实现信号与槽函数。

connect(cb,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));

void MainWindow::comboboxIndex(int index)
{
    qDebug()<<"你选择的地区是:"<itemText(index)<itemText(index),QMessageBox::Yes|QMessageBox::No);
    mb.exec();
}

十二、输入组控件InputWidget_第2张图片

 void QComboBox:: currentIndexChanged ( int index ):

此信号被发送每当 currentIndex 在组合框透过用户交互或编程方式改变。项的 index 被传递或 -1,若组合框变为空或 currentIndex 被重置。

完整代码

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include
#include

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setGeometry(100,200,1000,600);

    cb=new QComboBox(this);
    cb->setGeometry(10,10,200,30);
    cb->addItem("北京市");
    cb->addItem("上海市");

    connect(cb,SIGNAL(currentIndexChanged(int)),this,SLOT(comboboxIndex(int)));

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::comboboxIndex(int index)
{
    qDebug()<<"你选择的地区是:"<itemText(index)<itemText(index),QMessageBox::Yes|QMessageBox::No);
    mb.exec();
}

12.2 字体组合框QFontComboBox

组合框中填充了按字母顺序排列的字体系列名称列表,例如 Arial、Helvetica 和 Times New Roman。如果可能,将使用实际字体显示姓氏。对于 Symbol 等字体,如果名称在字体本身中无法表示,则字体示例将显示在系列名称旁边。

QFontComboBox 通常用于工具栏中,与用于控制字体大小的 QComboBox 和用于粗体和斜体的两个 QToolButton 结合使用。

当用户选择新字体时,除了 currentIndexChanged () 之外,还会发出 currentFontChanged () 信号。

调用 setWritingSystem () 告诉 QFontComboBox 只显示支持给定书写系统的字体,调用 setFontFilters () 过滤掉某些类型的字体,例如不可缩放字体或等宽字体。

Windows Vista 上 QFontComboBox 的屏幕截图

创建一个QMainWindow工程。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

#include
#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    
    QFontComboBox *fcb;
    QLabel *lb;
    
private slots:
    void func(QFont);
};
#endif // MAINWINDOW_H

 创建QFontComboBox和QLabel对象,并且设置一个位置。

    fcb=new QFontComboBox(this);
    lb=new QLabel(this);
    fcb->setGeometry(10,50,200,30);
    lb->setGeometry(10,70,300,50);

十二、输入组控件InputWidget_第3张图片

 实现信号与槽函数。

connect(fcb,SIGNAL(currentFontChanged(QFont)),this,SLOT(func(QFont)));

void MainWindow::func(QFont index)
{
    lb->setFont(index);
    QString str="CSDN博客";
    lb->setText(str);

}

十二、输入组控件InputWidget_第4张图片

十二、输入组控件InputWidget_第5张图片

void QFontComboBox:: currentFontChanged (const QFont & font ):

每当当前字体更改时,都会发出此信号,使用新字体 

12.3 行编辑框 QLineEdit

行编辑允许用户键入和编辑单行纯文本,采用有用编辑功能的集合,包括:撤消/重做、剪切/粘贴及拖放 (见 setDragEnabled ()).

通过改变 echoMode () 为行编辑,它还可以用作只写字段 (用于密码之类的输入)。

可以把文本长度约束到 maxLength ()。可以任意约束文本使用 validator () 或 inputMask (),或两者。当在同一行编辑的验证器和输入掩码之间切换时,最好清零验证器或输入掩码,以防未定义行为。

相关类 QTextEdit 允许多行,编辑富文本。

可以改变文本采用 setText () 或 insert ()。文本的检索采用 text ();显示文本 (可能不同,见 EchoMode ) 的检索采用 displayText ()。可以选择文本采用 setSelection () 或 selectAll (), 且选择可以被 cut (), copy () 和 paste ()。可以对齐文本采用 setAlignment ().

当文本改变时 textChanged () 信号被发射;当文本改变时,除了通过调用 setText () textEdited () 信号被发射;当光标移动时 cursorPositionChanged () 信号被发射;而当按下 Return 或 Enter 键时 returnPressed () 信号被发射。

当编辑完成时,由于行编辑失去聚焦或按下 Return/Enter 键 editingFinished () 信号被发射。

注意:若行编辑有设置验证器, returnPressed ()/ editingFinished () 信号才会被发射,若验证器返回 QValidator::Acceptable .

默认情况下,QLineEdit 拥有由平台风格指南指定的框架;可以关闭它通过调用 setFrame (false).

默认键绑定的描述见下文。行编辑还提供上下文菜单 (通常通过鼠标右键援引),呈现这些编辑选项中的一些。

十二、输入组控件InputWidget_第6张图片

创建一个QMainWindow工程

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include
#include
#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    
    QLineEdit *le;
    QPushButton *pb;
    QLabel *lb;
    
private slots:
    void click();
};
#endif // MAINWINDOW_H

mainwindow.cpp

实例化对象

    le=new QLineEdit(this);
    le->setGeometry(10,150,200,30);
    pb=new QPushButton(this);
    pb->setGeometry(220,150,100,30);
    pb->setText("点击我");
    lb=new QLabel(this);
    lb->setGeometry(10,200,400,30);
    lb->setText("你输入的内容为:");

十二、输入组控件InputWidget_第7张图片

实现信号和槽函数,通过QLabel显示QLineEdit的编辑。

connect(pb,SIGNAL(clicked()),this,SLOT(click()));

void MainWindow::click()
{
    QString str="你输入的内容为:";
    str=str+le->text();
    lb->setText(str);
    le->clear();
}

十二、输入组控件InputWidget_第8张图片

点击按钮 

十二、输入组控件InputWidget_第9张图片

 void QLineEdit:: clear ():

清零行编辑的内容。

与之类似的还有文本编辑器QTextEdit,这里就不再阐述了。

12.4 多行文本编辑器 QPlainTextEdit

QPlainTextEdit 是支持纯文本的高级查看器/编辑器。经优化,它能处理大文档和快速响应用户输入。

QPlainText 使用了一样的技术和概念,如 QTextEdit ,但为纯文本处理进行了优化。

QPlainTextEdit 工作于段落和字符。段落是自动换行以拟合 Widget 宽度的格式化字符串。默认情况下,当读取纯文本时,一个换行符表示一个段落。文档由零个或多个段落组成。段落由硬换行符分隔。段落中的每个字符均有其自己的属性,例如:字体和颜色。

QPlainTextEdit 中的鼠标光标形状为 Qt::IBeamCursor 默认情况下。它可以被改变透过 viewport () 的光标特性。

创建一个QMainWindow工程

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

#include
#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    
    QPlainTextEdit *pte;
    QRadioButton *rb;
    
private slots:
    void click();
};
#endif // MAINWINDOW_H

mainwindow.cpp

实例化对象

    pte=new QPlainTextEdit(this);
    pte->setGeometry(10,250,400,200);
    rb=new QRadioButton(this);
    rb->setGeometry(300,220,200,30);
    rb->setText("只读模式");

十二、输入组控件InputWidget_第10张图片

设置工作目录为可执行程序的工作目录并加载到文件流

    QDir::setCurrent(QCoreApplication::applicationDirPath());
    QFile fe("D:/main.txt");
    fe.open((QFile::ReadOnly|QFile::Text));

    QTextStream ts(&fe);
    pte->insertPlainText(ts.readAll());

十二、输入组控件InputWidget_第11张图片

bool QDir::setCurrent(const QString &path):

将应用程序的当前工作目录设置为path。如果目录已成功更改,则返回true;否则返回false。

QString QCoreApplication::applicationDirPath():

返回包含应用程序可执行文件的目录。
例如,如果您在C:\Qt目录下安装了Qt,并且运行regexp示例,该函数将返回"C:/Qt/examples/tools/regexp"。
在macOS和iOS上,这将指向实际包含可执行文件的目录,该目录可能位于应用程序包中(如果应用程序是捆绑的)。

警告:在Linux上,此函数将尝试从/proc文件系统获取路径。如果失败,它假定argv[0]包含可执行文件的绝对文件名。该函数还假定应用程序没有更改当前目录。

void QPlainTextEdit::insertPlainText(const QString &text):

在当前光标位置插入文本的方便槽。

QString QTextStream::readAll():

读取流的全部内容,并将其作为QString返回。在处理大文件时避免使用此函数,因为它将消耗大量内存。
如果不知道有多少数据可用,调用readLine()更好。

实现信号与槽函数,实现只读模式

connect(rb,SIGNAL(clicked()),this,SLOT(click()));

void MainWindow::click()
{
    if(rb->isChecked())
    {
        pte->setReadOnly(true);
    }
    else
    {
        pte->setReadOnly(false);
    }
}

十二、输入组控件InputWidget_第12张图片

完整代码

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include
#include

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    pte=new QPlainTextEdit(this);
    pte->setGeometry(10,250,400,200);
    rb=new QRadioButton(this);
    rb->setGeometry(300,220,200,30);
    rb->setText("只读模式");

    QDir::setCurrent(QCoreApplication::applicationDirPath());
    QFile fe("D:/main.txt");
    fe.open((QFile::ReadOnly|QFile::Text));

    QTextStream ts(&fe);
    pte->insertPlainText(ts.readAll());

    connect(rb,SIGNAL(clicked()),this,SLOT(click()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::click()
{
    if(rb->isChecked())
    {
        pte->setReadOnly(true);
    }
    else
    {
        pte->setReadOnly(false);
    }
}

12.5 整数旋转框 QSpinBox

QSpinBox 旨在处理整数和离散值的集 (如:月份名);使用 QDoubleSpinBox 为浮点值。

QSpinBox允许用户通过单击向上/向下按钮或按键盘上的向上/向下来增加/减少当前显示的值来选择值。用户还可以手动键入值。数字显示框支持整数值,但可以扩展为使用 validate ()、 textFromValue () 和 valueFromText () 的不同字符串。

每次值更改时,QSpinBox 都会发出 valueChanged () 和 textChanged () 信号,前者提供 int,后者提供 QString 。 textChanged () 信号提供带有前缀 () 和后 缀 () 的值。可以使用 () 获取当前值,并设置采用 setValue ()。

单击向上/向下按钮或使用键盘快捷键的向上和向下箭头将以大小为 singleStep () 的步长增加或减少当前值。如果要更改此行为,可以重新实现虚函数 stepBy ()。最小值和最大值以及步长可以使用其中一个构造函数进行设置,以后可以使用 setMinimum ()、 setMaxim( ) 和 setSingleStep () 进行更改。

大多数旋转框是定向的,但QSpinBox也可以作为圆形旋转框运行,即如果范围是0-99,当前值是99,如果包装 ()设置为true,单击“向上”将给出0。如果需要循环行为,请使用 setWrapping ()。

显示的值可以预先添加和附加任意字符串,例如指示货币或度量单位。参见 setPrefix () 和 setSuffix ()。使用文本 ()(包括任何前缀 () 和后缀 ())或使用 cleanText ()(没有前 缀 ()、后缀 () 且没有前 导或尾随空格)检索数字显示框中的文本。

除了数值范围之外,通常还希望为用户提供特殊(通常是默认)选择。参见 setSpecialValueText () 了解如何使用 QSpinBox 执行此操作。

创建一个QMainWindow工程

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    
    QSpinBox *spb;
    
private slots:
    void changed(int);
};
#endif // MAINWINDOW_H

mainwindow.cpp

初始化旋转框

    this->setStyleSheet("QMainWindow{background-color:rgba(250,220,120,100%)}");

    spb=new QSpinBox(this);
    spb->setGeometry(440,250,150,30);
    spb->setRange(0,100);
    spb->setSingleStep(10);
    spb->setValue(100);
    spb->setSuffix("%不透明度");

十二、输入组控件InputWidget_第13张图片

void QSpinBox::setRange(int minimum, int maximum):

方便的函数,通过单个函数调用设置最小 值和 最大值.

void QSpinBox:: setStepType ( QAbstractSpinBox::StepType stepType ) :

将数字显示框的步骤类型设置为 stepType ,即单步或自适应十进制步骤。

自适应十进制步长是指步长将连续调整到低于当前电流的十次方。因此,当值为 1100 时,步长设置为 100,因此步进一次将其增加到 1200。对于 1200,升级将其带到 1300。对于负值,从 -1100 下降到 -1200。

在处理边缘情况时会考虑步进方向,因此从 100 降级会将值降至 99 而不是 90。因此,上一级,然后下降一级,反之亦然,总是落在起始值上;99 -> 100 -> 99.

设置此值将导致数字显示框忽略 singleStep 的值,尽管它会保留,以便在以后关闭自适应十进制步骤时 singleStep 生效。

注意: Setter 函数对于特性 stepType .


void setSuffix(const QString &suffix):

此属性保存旋转框的后缀
后缀被附加到显示值的末尾。典型的用途是显示计量单位或货币符号。

实现信号和槽函数,使得窗口随着数值的大小改变透明度。

connect(spb,SIGNAL(valueChanged(int)),this,SLOT(changed(int)));


void MainWindow::changed(int v)
{
    double x=(double)v/100;
    this->setWindowOpacity(x);
}

十二、输入组控件InputWidget_第14张图片

十二、输入组控件InputWidget_第15张图片

void QSpinBox::valueChanged(int i):

每当旋转箱的值发生变化时,就会发出这个信号。新值的整数值在i中传递。


void setWindowOpacity(qreal level):

此属性保存窗口的不透明度级别。
不透明度的有效范围是从1.0(完全不透明)到0.0(完全透明)。
默认情况下,此属性的值为1.0。
该特性在支持Composite扩展的嵌入式Linux、macOS、Windows和X11平台上可用。

完整代码

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setStyleSheet("QMainWindow{background-color:rgba(250,220,120,100%)}");

    spb=new QSpinBox(this);
    spb->setGeometry(440,250,150,30);
    spb->setRange(0,100);
    spb->setSingleStep(10);
    spb->setValue(100);
    spb->setSuffix("%不透明度");

    connect(spb,SIGNAL(valueChanged(int)),this,SLOT(changed(int)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changed(int v)
{
    double x=(double)v/100;
    this->setWindowOpacity(x);
}

12.6 时间控件

接下来介绍三个时间控件,分别是时间编辑QTimeEdit、日期编辑QDateEdit和日期时间编辑QDateTimeEdit

QTimeEdit

由 QTimeEdit 提供的很多特性和函数都有实现在 QDateTimeEdit 。这些是此类的相关特性:

  • time 保持由 Widget 显示的时间。
  • minimumTime 定义可以由用户设置的最小 (最早) 时间。
  • maximumTime 定义可以由用户设置的最大 (最新) 时间。
  • displayFormat 包含用于格式化 Widget 显示时间的字符串。

QDateEdit

QDateEdit提供的很多属性和函数都是在QDateTimeEdit 中实现的。这些是此类的相关特性: 

  • date 保存小组件显示的日期。
  • minimumDate 定义用户可以设置的最小(最早)日期。
  • maximumDate 定义用户可以设置的最大(最新)日期。
  • displayFormat 包含一个字符串,用于设置小组件中显示的日期的格式。

QDateTimeEdit

QDateTimeEdit 允许用户通过使用键盘或箭头键递增/递减日期、时间值来编辑日期。箭头键可用于从 QDateTimeEdit 框一区域移至另一区域。日期和时间按设置格式出现;

创建一个QMainWindow工程

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

#include
#include
#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    
    QTimeEdit *te;
    QDateEdit *de;
    QDateTimeEdit *dte;
};
#endif // MAINWINDOW_H

mainwindow.cpp

实现显示当前时间

    dte=new QDateTimeEdit(QDateTime::currentDateTime(),this);
    dte->setGeometry(440,290,200,30);
    te=new QTimeEdit(QTime::currentTime(),this);
    te->setGeometry(440,330,200,30);
    de=new QDateEdit(QDate::currentDate(),this);
    de->setGeometry(440,370,200,30);

十二、输入组控件InputWidget_第16张图片

12.7 滚动条控件QScrollBar

滚动条是控件,使用户能够访问大于用于显示文档的 Widget 的文档部分。它为用户提供当前文档位置及可见文档数量的视觉指示。滚动条通常装备有其它控件,使导航更精确。Qt 以适合各平台的方式显示滚动条。

如果您需要在另一个小部件上提供滚动视图,则使用 QScrollArea 类可能更方便,因为它提供了视口小部件和滚动条。如果您需要使用 QAbstractScrollArea 为专用小部件实现类似的功能,QScrollBar 非常有用;例如,如果您决定将 QAbstractItemView 作为子类。对于使用滑块控件获取给定范围内的值的大多数其他情况,QSlider 类可能更适合您的需求。

 

每个滚动条都有一个值,该值指示滑块与滚动条起点之间的距离;这是通过 () 和设置采用 setValue () 获得的。此值始终位于为滚动条定义的值范围内,包括 minimum() 到 maximum()。 可接受值的范围可以使用 setMinimum () 和 setMaxim () 进行设置。在最小值下,滑块的上边缘(对于垂直滚动条)或左边缘(对于水平滚动条)将位于滚动条的顶部(或左端)。在最大值处,滑块的底部(或右侧)边缘将位于滚动条的底部(或右侧)末端。

滑块的长度通常与页面步长的值有关,通常表示滚动视图中显示的文档区域的比例。页面步长是用户按下 Page Up 和 Page Down 键时值更改的量,并使用 setPageStep () 进行设置。使用光标键对行步长定义的值进行较小的更改,并且此数量是使用 setSingleStep() 设置的。

请注意,使用的值范围与滚动条小部件的实际大小无关。在为范围和页面步骤选择值时,无需考虑这一点。

为滚动条指定的值范围通常与QSlider的值范围不同,因为需要考虑滑块的长度。如果我们有一个有 100 行的文档,并且我们只能在小部件中显示 20 行,我们可能希望构造一个页面步长为 20、最小值为 0、最大值为 80 的滚动条。这将为我们提供一个包含五个“页面”的滚动条。

QScrollBar 仅提供整数范围。请注意,尽管 QScrollBar 处理非常大的数字,但当前屏幕上的滚动条无法有效地表示超过 100,000 像素的范围。除此之外,用户很难使用键盘或鼠标控制滑块,并且滚动箭头的使用将受到限制。

ScrollBar 继承了 QAbstractSlider 的一整套信号:

  • valueChanged() 在滚动条的值更改时发出。tracking() 确定此信号是否在用户交互期间发出。
  • rangeChanged() 在滚动条的值范围发生变化时发出。
  • sliderPressed() 在用户开始拖动滑块时发出。
  • sliderMoved() 在用户拖动滑块时发出。
  • sliderReleased() 在用户释放滑块时发出。
  • actionTriggered() 在用户交互或通过 triggerAction() 函数更改滚动条时发出。

滚动条可以由键盘控制,但它默认有一个 Qt::NoFocus 的 focusPolicy () 。使用 setFocusPolicy () 启用键盘与滚动条的交互:

  • 左/右箭头水平移动滚动条一单步幅。
  • 上/下箭头垂直移动滚动条一单步幅。
  • PageUp 键上移一页。
  • PageDown 键下移一页。
  • Home 键移至开头 (最小)。
  • End 键移至结束 (最大)。

可以通过使用 triggerAction() 函数来模拟用户与滚动条控件的交互来控制滑块本身。如果您有许多不同的小部件使用共同的值范围,这将非常有用。

大多数 GUI 样式使用 pageStep () 值来计算滑块的大小。

创建一个QMainWindow工程

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    
    QScrollBar *vs,*hs;
};
#endif // MAINWINDOW_H

mainwindow.cpp

实例化对象

    hs=new QScrollBar(Qt::Horizontal,this);
    hs->setGeometry(0,500,1000,30);
    vs=new QScrollBar(Qt::Vertical,this);
    vs->setGeometry(500,0,30,500);

十二、输入组控件InputWidget_第17张图片

12.8 快捷键输入控件QKeySequenceEdit

这个小部件允许用户选择一个 QKeySequence ,它通常用作快捷方式。录制在小部件接收到焦点时启动,并在用户释放最后一个键一秒后结束。

创建一个QMainWindow工程

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    
    QKeySequenceEdit *kse;
    
private slots:
    void changed(const QKeySequence &);
};
#endif // MAINWINDOW_H

mainwindow.cpp

实例化对象并且设置位置

    kse=new QKeySequenceEdit(this);
    kse->setGeometry(400,530,200,30);

十二、输入组控件InputWidget_第18张图片

 实现信号与槽函数,使得输入快捷键执行对应的功能。

connect(kse,SIGNAL(keySequenceChanged(const QKeySequence &)),this,SLOT(changed(const QKeySequence &)));

void MainWindow::changed(const QKeySequence &ks)
{
    if(ks==QKeySequence(tr("Ctrl+Q"))) this->close();
    else qDebug()<

十二、输入组控件InputWidget_第19张图片

十二、输入组控件InputWidget_第20张图片 十二、输入组控件InputWidget_第21张图片

关闭窗口

十二、输入组控件InputWidget_第22张图片 

 
void keySequenceChanged(const QKeySequence &keySequence):

此属性包含当前选择的键序列。

快捷方式可以由用户更改,也可以通过 setter 功能更改。

你可能感兴趣的:(QT,qt,开发语言,c++)