Qt5.9学习笔记2-输入/显示/按钮/菜单/时间/字体/图片

本文详细介绍了Qt库中的多种图形用户界面组件,包括QSpinBox、QSlider、QProgressBar、QDial、QLCDNumber、QComboBox、QLineEdit、QPlainTextEdit、QListWidget、QTreeWidget、QTableWidget等。这些组件涵盖了数值输入、滑动选择、进度显示、文本编辑、下拉列表、多行文本、项视图和容器组件等多个功能。此外,还涉及到了日期时间组件、菜单、图标、字体、标签和图片显示的相关类和方法。通过这些组件,开发者可以构建出丰富多样的GUI应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般属性在类的接口中有读取函数和设置函数,对于设置属性函数就是属性名前加set

如QSpinBox类中有属性value用来显示组件当前值,可以使用setValue()方法来设置该组件的值.

1.输入组件和显示组件

1.1数值输入显示组件SpinBox

1)QSpinbox与QDoubleSpinBox

//Public Slots
void setValue(int val);
//Signals
void valueChanged(int i);
void valueChanged(const QString &text);

QSpinBox用于整数的显示和输入

QDougbleSpinBox用于浮点数的显示和输入

读取数值类型和设置数据类型不同时,无需转换,Qt会自动转换.

常用属性

cleanText : const QString     //清理文本
displayIntegerBase : int        //显示整数使用的进制
maximum : int                //最大值
minimum : int                //最小值
prefix : QString             //前缀
singleStep : int             //单步值
suffix : QString             //后缀
value : int                  //具体值,显示值

 接口

//Public Functions
QString cleanText() const;
QString prefix()const;
int maximum()const;
int minimum()const;
int singleStep()const;
int value()const;

void setMaximum(int max);
void setMinimum(int min);
void setPrefix(const QString &prefix);
void setRange(int minimum, int maximum);
void setSingleStep(int val);

2)QSlider

       QSlider是滑动条,父类是QAbstractSlider

案例展示

常用接口

 QAbstractSlider(QWidget *parent = nullptr);
 virtual ~QAbstractSlider();
 bool hasTracking() const;
 bool invertedAppearance() const;
 bool invertedControls() const;
 bool isSliderDown() const;
 int maximum() const;
 int minimum() const;
 Qt::Orientation orientation() const;
 int pageStep() const;
 void setInvertedAppearance(bool);
 void setInvertedControls(bool);
 void setMaximum(int);
 void setMinimum(int);
 void setPageStep(int);
 void setSingleStep(int);
 void setSliderDown(bool);
 void setSliderPosition(int);
 void setTracking(bool enable);
 int singleStep() const;    //单步值
 int sliderPosition() const;    //滑块位置
 void triggerAction(QAbstractSlider::SliderAction action);
 int value() const;

singleStep:单步值

pageStep:在Slider上输入焦点,按PgUp和PgDn键改变的值

sliderPosition滑块位置

tracking:value和sliderPosition是否对应,该值为BOOL变量

orientation:Slider的方向,取值为Qt::Horizontal和Qt::Vertical

invertedAppearance:显示方式是否相反,false时自左向右增大

invertedControls:PgUp和PgDn键是否对调

3)QScrollBar

滚动条(卷轴),和QSlider的一样,继承了QAbstrackSlider的接口等

案例展示

4)QDial

拨号盘,和QSilder无二致,只需要注意两个附加属性

notchesVisible:小刻度是否可见

notchTarget:表盘刻度间的间隔像素值

 int notchSize() const
 qreal notchTarget() const
 bool notchesVisible() const
 void setNotchTarget(double target)

5)QProgressBar

 QString format() const;
 bool invertedAppearance() const;
 bool isTextVisible() const;
 int maximum() const;
 int minimum() const;
 Qt::Orientation orientation() const;

 void resetFormat();

 void setAlignment(Qt::Alignment alignment);
 void setFormat(const QString &format);
 void setInvertedAppearance(bool invert);
 void setTextDirection(QProgressBar::Direction textDirection);
 void setTextVisible(bool visible);

 virtual QString text() const;
 QProgressBar::Direction textDirection() const;
 int value() const;
format显示文字的格式,%p%显示百分比,%v显示当前值,%m显示当前值

6)QLCDNumber

数字时钟,

 bool checkOverflow(double num) const;
 bool checkOverflow(int num) const;
 int digitCount() const;
 int intValue() const;
 QLCDNumber::Mode mode() const;
 QLCDNumber::SegmentStyle segmentStyle() const;
 void setDigitCount(int numDigits);
 void setMode(QLCDNumber::Mode);
 void setSegmentStyle(QLCDNumber::SegmentStyle);
 bool smallDecimalPoint() const;
 double value() const;

digitCount显示数的位数,小数点也算一位

smallDecimallPoint是否有小数点

mode数的显示进制,setDecMode()设置成十进制,setBinMode()二进制setOctMode()八进制,setHexMode()十六进制

intValue返回显示的整数值

value返回当前值

2.下拉列表和文本编辑组件

2.1 QComboBox

下拉列表组件,

列表每个内容称为item, 且每个item可以关联一个QVariant类型的变量,存储不可见的用户数据;

双击ui界面组件,可以直接添加需要的item

不可访问整个列表,可索引item

默认显示的第一个item的名称

void addItem(const QString&, const QVariant& userData = QVariant());
//addItem()可以给项关联自定义数据

int currentIndex();
//currentIndex()返回当前项的序号,0开始

int count();
//count()返回项总数

QString currentText();
//currentText()当前项的文字

QString itemText(int index);
//itemText()指定索引号项的文字

QVariant currentData(int role = Qt::UserRole);
//currentData()返回当前项关联的自定义数据

QVariant itemData(int index , int role = Qt::UserRole);

void currentIndexChanged(int index);
void currentIndexChanged(const QString& text);
//currentIndexChanged()是信号,其中index是索引号,text是当前项的文字内容

ui->comboBox->clear(); 
ui->comboBox->setEditable(checked);

ui->comboBox->addItem(QString); //列表末尾追加一个字符串
ui->comboBox->addItems(QStringList);    //列表末尾追加一个列表字符串

2.2QLineEdit

单行文本编辑器

QString text() const;
void setEchoMode(EchoMode);

EchoMode是枚举类型,标记了该编辑器如何显示已输入的文本

setEchoMode()设置编辑器显示方式,其中EchoMode主要包含了如下成员:        

  •     QLineEdit::Normal
  •     QLineEdit::NoEcho (不显示任何)
  •     QLineEdit::Password (显示*)
  •     QLineEdit::PasswordEchoOnEdit (输入时显示,否则显示*)

2.3QPlainTextEdit

QPlainTextEdit是多行文本编辑组件,提供右键快捷菜单,文字内容是以QTextDocument类型的文本对象 存储的,即以文本块的形式存储的,一个文本块就是一个段落,一个段落以回车符作为结束符

QDocument,一个文档document,包含了多个文本块,从document中提取文本块则是QTextBlock类型存储的

1)QTextBlock

文本块,是QTextDocument的基本构成

text()提取纯文本信息

2)QTextDocument

是QPlainTextEdit的基本构成

int blockCount();
//获取文本块概述
QTextBlock findBlockByNumber(int blockNumber);
//从0个文本块开始读取,至blockNumber个

3)QPlainTextEdit

appendPlainText(const QString &text);
//末尾添加一行字符串

QString toPlainText() const;
//提取全部字符输出成一条字符串
QTextDocument* document();
//返回文本指针
customContextMenuRequested();
//信号,右键菜单启动信号
createStandardContextMenu();
//创建标准菜单

3.基于item的组件

用于项处理的组件,有两类一个类是Item View,另一类是Item Widget,后者最常用

在ui界面中:

  • ItemView是基于Model/View结构存储数据
  • ItemWidget是基于直接把数据存储到每一个项中

3.1QListWidget

列表组件存储,区分QComboBox是下拉列表,区分与QPlainTextEdit是多行文本编辑器

QListWidget,一行一项,存储多个项的列表组件,每个项是一个QListWidgetItem类对象,ui界面双击可编辑

QListWidgetItem 

setFlags()设置该item的属性

QListWidgetItem::flags;
setFlags();
/*
setFlags()时,选择参数:
Qt::ItemIsSelectable
Qt::ItemIsEditable 该项是否可编辑
Qt::ItemIsDragEnabled   该项是否可拖动
Qt::ItemisDropEnabled    该项是否可以接收拖放的项
Qt::ItemIsUserCheckable  是否可以选中
*/

item的移除,复选,创建,显示文本

其中添加自然是针对QListWidget而不是QListWidgetItem

QListWidgetItem::takeItem(int row);
//takeItem() 移除第row行的Item,但需要手动用delete 删除项

QListWidgetItem::setCheckState(Qt::CheckState);
//setCheckState()设置项的复选状态

QListWidgetItem(const QString &text, QListWidget *parent = nullptr, int type = Type);
//创建一个list项
QString text() const;
//返回该list项的text文本

item的添加,插入,list列表的清理

QListWidget::clear();
QListWidget::addItem();
//addItem() 每个项都是一个QListWidgetItem类对象,
//先创建该类对象,然后用addItem()方法把该项添加到列表中,追加

QListWidget::insertItem(int row, QListWidgetItem * )
//insertItem()在第row行前插入一个Item

item的索引

QListWidgetItem *currentItem() const;
//返回当前list的item


//信号:
currentRowChanged(int row);
//信号发射且传递当前项行号

currentItemChanged(QListWidgetItem*current,QListWidgetItem* pre);
//信号发射,传递当前项和前一项

curentItemChanged(const QString&);
//当前项内容发生变化

3.2QTreeWidget

一节点一项,每个节点都是一个QTreeWidgetItem类对象,添加节点必然先定义该类对象

创建节点的类型往往是枚举量,且值大于1000

树包括了顶层节点和分组节点,其中分组节点级数无限制

添加节点时,最好确保父子节点设定的类型相同.

树和列

把树和列分开看, 列的存在是对树的一个信息展示增强, 每一列表示了节点的归属信息,每一个子节点可以根据列的个数(暂为m列), 来设置子节点所包含的QString对象个数n,一般是n小于等于m

QTreeWidgetItem接口

创建Item

学习如下这种创建技巧, 这里每个子节点name都是根据列个数而添加了3个QString对象

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QTreeWidgetItem* item1 = new QTreeWidgetItem(QStringList()<<"class1");
    ui->treeWidget->addTopLevelItem(item1);
    QTreeWidgetItem* name1 = new QTreeWidgetItem(QStringList()<<"alex"<<"aleb"<<"alesk");
    QTreeWidgetItem* name2 = new QTreeWidgetItem(QStringList()<<"alexx"<<"aleb"<<"alesk");
    QTreeWidgetItem* name3 = new QTreeWidgetItem(QStringList()<<"alexxx"<<"aleb"<<"alesk");
    item1->addChildren(QList<QTreeWidgetItem*>()<<name1<<name2<<name3);
    
    QTreeWidgetItem* item2 = new QTreeWidgetItem(QStringList()<<"class2");
    ui->treeWidget->addTopLevelItem(item2);
}

//QTreeWidgetItem
 void addChild(QTreeWidgetItem *child);
 void addChildren(const QList<QTreeWidgetItem *> &children);

 QTreeWidgetItem *takeChild(int index);
 QList<QTreeWidgetItem *> takeChildren();
 void removeChild(QTreeWidgetItem *child);
//增加和删除节点


 QTreeWidgetItem *child(int index) const;
//索引节点
 int childCount() const;
//节点总数
 int indexOfChild(QTreeWidgetItem *child) const;
//孩子节点总数
 void insertChild(int index, QTreeWidgetItem *child);
//插入节点
 void insertChildren(int index, const QList<QTreeWidgetItem *> &children);

void setText(int column, const QString &text);
//设置某列的文字
 QString text(int column) const;
//返回某列的文字

bool QTreeWidgetItem::isSelected() const;
//信号,当节点被选择时发射

 QTreeWidget接口

ui->treeFiles->clear();//清除目录树所有节点

//QTreeWidget
void QTreeWidget::addTopLevelItem(QTreeWidgetItem *item);
//添加顶层节点

void QTreeWidget::addTopLevelItems(const QList<QTreeWidgetItem *> &items);
//添加多个顶层节点

 int currentColumn() const;
//返回当前列
 QTreeWidgetItem *currentItem() const;
//返回当前节点

 QTreeWidgetItem *takeTopLevelItem(int index);
//从树中删除顶层节点,不删除节点对象

 int columnCount() const;
//返回树的列数

 int topLevelItemCount() const;
//返回树顶点总数

void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
//信号,树改变时发射

3.3 QTableWidget

一单元格一项,Table即桌子,表,表格的意思

     QTableWidget是表格组件类,表格第一行为行表头,第一列是列表头,表头不可编辑,

    每个单元格是一个QTableWIdgetItem对象,且可存储一个QVariant变量

    每次向表格添加单元格内容时,需要先创建QTableWidgetItem类对象

   一般创建表格,先定列数,然后增加行数

在ui界面中,可以编辑行列表头和内容,但是在程序中自动添加和修改时,仍需要借助接口实现.

1) QTableWidgetItem

 QTableWidgetItem(const QTableWidgetItem &other);
 QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type);
 QTableWidgetItem(const QString &text, int type = Type);

 int column() const;
//返回表格的column总数
 int row() const;
//返回单元格的rows总数
 QString text() const;
//返回单元格的内容
 QFont font() const;
//返回单元格的字体
 bool isSelected() const;
//如果item被选中,返回true

 void setBackground(const QBrush &brush);
//设置单元格北京
 void setFont(const QFont &font);
 void setIcon(const QIcon &icon);
 void setSelected(bool select);
 void setText(const QString &text);
//设置单元格内容
 void setTextAlignment(int alignment);
//设置单元格对齐方式
 int textAlignment() const;
//返回单元格对齐方式

2) QTableWidget

 QTableWidget(int rows, int columns, QWidget *parent = nullptr);

 int column(const QTableWidgetItem *item) const;
//返回item所在的列
 int row(const QTableWidgetItem *item) const;
//返回item所在的行

 int columnCount() const;
//返回列的总个数
 int currentColumn() const;
//返回当前item所在列
 QTableWidgetItem *currentItem() const;
//返回当前的item
 int currentRow() const;
//返回当前item所在行
 void editItem(QTableWidgetItem *item);
//如果可编辑则对该item进入编辑状态

 QTableWidgetItem *horizontalHeaderItem(int column) const;
//返回行表头

 QTableWidgetItem *item(int row, int column) const;
//返回指定行列的item

 void removeCellWidget(int row, int column);
//删除指定行列的单元格

 int rowCount() const;
//返回总行数

 void setColumnCount(int columns)
 void setCurrentCell(int row, int column);
//设置当前单元格的位置
 void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command)
 void setCurrentItem(QTableWidgetItem *item);
//覆盖当前item
 void setHorizontalHeaderItem(int column, QTableWidgetItem *item);
//设置行表头
 void setHorizontalHeaderLabels(const QStringList &labels);
//设置多个行表头
 void setItem(int row, int column, QTableWidgetItem *item);
//设置指定行列的item
 void setRangeSelected(const QTableWidgetSelectionRange &range, bool select);
//设置选择范围
 void setRowCount(int rows);
//设置总行数
 void setVerticalHeaderItem(int row, QTableWidgetItem *item);
//设置列表头
 void setVerticalHeaderLabels(const QStringList &labels);
//设置多个列表头
 QTableWidgetItem *takeHorizontalHeaderItem(int column);
//移除行表头
 QTableWidgetItem *takeItem(int row, int column);
//移除指定行列item
 QTableWidgetItem *takeVerticalHeaderItem(int row);
//移除列表头
 QTableWidgetItem *verticalHeaderItem(int row) const;
//返回指定行的列表头
 void clear();
//清空表格

 void insertColumn(int column);
//在第column列插入一列
 void insertRow(int row);
//在第row行插入行
 void removeColumn(int column);
//移除该列
 void removeRow(int row);
//移除该行
currentCellChanged(int cRow,int cCol,int preRow,int preCol);
currentCellChanged(QTableWidgetItem*, QTableWidgetItem*);
//currentCellChanged():QTableWidget有信号:当单元格发生切换时,发射

4.日期,时间

4.1 相关的存储类

QTime

时间数据类型

QDate

日期数据类型

QDataTIme

时间日期数据类型

currentDateTime();
time();
date();

4.2相关的界面组件类

QTimeEdit

编辑时间的组件

QDateEdit

编辑日期的组件

QDateTimeEdit

datetime
date
time
maximumDateTime
minimumDateTime
maximumTime
minimumTime
currentSection
currentSectionIndex
calendarPopup
displayFormat

currentSection:返回当前光标所在的时间日期数据段

currentSectionINdex:用序号表示光标所在数据段

calendarPopup:允许弹出一个日历选择框

displayFormat:显示格式,如"yyyy-MM-dd HH:mm:ss"

QCalendarWidget

信号selectionChanged(),日历选择时发射此信号,返回的是QDate类

5. Containers容器类组件

ui编辑器中的containers主要有如下几种

5.1 QToolBox

Box即盒子,箱子的意思

QToolBox类,工具箱类,在QToolBox按照"组" 为单位, 但实际上该"组"表示的是"项", 下图中就有3组(项)工具;

同样的QToolBox可以在ui中直接进行编辑,也可以通过接口实现

常用接口

5.2QTabWidget

QTabWidget并不是一个 ItemWidget,是一个container,可以包含ItemWidget组件

QTabWidget

Tab即标签的意思,也叫多页(标签)容器类组件

 int addTab(QWidget *page, const QString &label);
 int addTab(QWidget *page, const QIcon &icon, const QString &label);
 void clear();
 int count() const;
//页数总数
 int currentIndex() const;
//当前所在页index
 QWidget *currentWidget() const;
//当前所在页
 int indexOf(QWidget *w) const;
//指定页的页数
 int insertTab(int index, QWidget *page, const QString &label);
//在index处插入新页
 bool isMovable() const;
//页是否可以移动
 bool isTabEnabled(int index) const;

 void removeTab(int index);
//移除指定页
 void setMovable(bool movable);
//设置是否可以移动

 void setTabText(int index, const QString &label);
//设置页的文字
QString tabText = ui->tabWidget->tabText(1);
//获取指定页文字

6. Button 按钮/Menu菜单

6.1QToolButton 

带menu的工具按钮,具有下拉菜单

 QToolButton(QWidget *parent = nullptr);

 QAction *defaultAction() const;
//返回默认的QAction
 void setDefaultAction(QAction *action);
//用于给按钮添加Action,每次单击菜单中的action都会出发action槽函数

 QMenu *menu() const;
//返回已有的菜单
 void showMenu();
//显示菜单
 void setMenu(QMenu *menu);
//设置菜单

 QToolButton::ToolButtonPopupMode popupMode() const;
//返回按钮按下的弹出菜单模式

 void setPopupMode(QToolButton::ToolButtonPopupMode mode);
//设置按钮样式

 Qt::ToolButtonStyle toolButtonStyle() const;
//返回按钮样式
 void setToolButtonStyle(Qt::ToolButtonStyle style);
//设置按钮样式

setPopupMode() 设置弹出菜单模式,

          QToolButton::MenuButtonPopup枚举量,菜单是小箭头,按箭头弹出菜单,直接单击按钮只会启动该按QAction

          QToolButton::InstantPopup同理,但单击按钮不会启动相关QAction

7. 菜单

在QWidget类中,都会有信号customContextMenuRequested(),右键时自动发射该信号,只要给该信号编写槽函数,然后关联即可.

每个菜单选项关联一个QAction这样可以避免菜单里的功能和菜单类对象关联,也就是一个菜单里包含了多个QAction;

每个QAction的槽函数负责每个菜单选项的功能实现;

必须要在显示后删除菜单类对象.

QMenu::exec();
QMenu::addAction();


QMenu* menuList=new QMenu(this); //创建菜单

//菜单添加QAction选项
menuList->addAction(ui->actListIni);
menuList->addAction(ui->actListClear);
menuList->addAction(ui->actListInsert);
menuList->addAction(ui->actListAppend);

menuList->addSeparator();
//菜单内添加分割线

menuList->exec(QCursor::pos()); //在鼠标光标位置显示右键快捷菜单

delete menuList; //手工创建的指针必须手工删除

8. 图标

QIcon

QIcon aIcon;
aIcon.addFile(":/images/icons/check2.ico"); //设置ICON的图标

9.标签,图片

9.1 QLabel

显示组件,可以显示图片、视频和文字,功能强大;

可以通过QLabel来设置一个QPixmap类对象,通过QPixMap类对象设置图片参数;

QLabel可以在ui界面中直接拖拽、修改.

9.2 QPixmap

10. 字体

QFont

QFont font;
font.setBold(true);
font.setPointSize(12);//字体大小


//与QStandardItemModel结合起来看

void MainWindow::on_actFontBold_triggered(bool checked)
{//设置字体粗体
    if (!theSelection->hasSelection())
        return;

//获取选择单元格的模型索引列表
    QModelIndexList selectedIndex=theSelection->selectedIndexes();

    for (int i=0;i<selectedIndex.count();i++)
    {
        QModelIndex aIndex=selectedIndex.at(i); //获取一个模型索引
        QStandardItem* aItem=theModel->itemFromIndex(aIndex);//获取项数据
        QFont font=aItem->font(); //获取字体
        font.setBold(checked); //设置字体是否粗体
        aItem->setFont(font); //重新设置字体
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值