微调框
它可以调节值,具有范围,可以设置每次的波动大小,可以添加前缀和后缀
QSpinBox and QDoubleSpinBox
#设置
函数 | 描述 |
---|---|
void setDisplayIntegerBase(int base) | 显示的进制 |
void setMaximum(int max) | 最大值 |
void setMinimum(int min) | 最小值 |
void setPrefix(const QString &prefix) | 前缀 |
void setRange(int minimum, int maximum) | 范围 |
void setSingleStep(int val) | 波动值 |
void setSuffix(const QString &suffix) | 后缀 void setvalue() |
setWrapping(true) | 设置循环 |
virtual QString textFromValue(int value) | 文本显示格式 |
#signal
void valueChanged(double d)
void valueChanged(const QString &text)
/*
* 微调框的的属性
* 前缀,后缀,步长,范围
*/
mywidget::mywidget()
{
setWindowTitle("my widget test");
QVBoxLayout *layout=new QVBoxLayout(this);
// ...
QSpinBox *pspinbox = new QSpinBox(this);
pspinbox->setRange(0, 100); // 范围
pspinbox->setSingleStep(1); // 步长
pspinbox->setValue(10); // 当前值
pspinbox->setPrefix("下载进度 "); // 前缀
pspinbox->setSuffix(" %"); // 后缀
pspinbox->setWrapping(true); // 开启循环
QTimer *ptimer=new QTimer(this);
connect(ptimer,&QTimer::timeout,[&pspinbox]{
int value=pspinbox->value()+1;
pspinbox->setValue(value);
});
ptimer->start(1000);
connect(pspinbox, QOverload<int>::of(&QSpinBox::valueChanged),
[=](int value)
{
qDebug() << "Value : " << value;
qDebug() << "Text : " << pspinbox->text();
});
//QDoubleSpinBox相似
layout->addWidget(pspinbox);
this->setFixedSize(300,300);
this->show();
}
QSlider
水平滑动条的微调框,,步长,刻度
void setTickInterval(int ti)//刻度间隔值
void setTickPosition(QSlider::TickPosition position)//当前位置
#signals
valueChanged() Emitted when the slider's value has changed. The tracking() determines whether this signal is emitted during user interaction.
sliderPressed() Emitted when the user starts to drag the slider.
sliderMoved() Emitted when the user drags the slider.
sliderReleased() Emitted when the user releases the slider.
// 滑动条
QSlider *pSlider = new QSlider(this);
pSlider->setOrientation(Qt::Horizontal); // 水平方向
pSlider->setMinimum(nMin); // 最小值
pSlider->setMaximum(nMax); // 最大值
pSlider->setSingleStep(nSingleStep); // 步长
/*
* 滑动条的属性
* 方向,范围,步长
*/
mywidget::mywidget()
{
setWindowTitle("my widget test");
QVBoxLayout *layout=new QVBoxLayout(this);
// 滑动条
QSlider *pslider = new QSlider(this);
pslider->setOrientation(Qt::Horizontal); // 水平方向
pslider->setMinimum(0); // 最小值
pslider->setMaximum(100); // 最大值
pslider->setValue(0);
pslider->setSingleStep(1); // 步长
pslider->setTickInterval(100/5); //刻度间隔
pslider->setTickPosition(QSlider::TicksAbove); //刻度位置
connect(pslider,QOverload<int>::of(&QSlider::valueChanged),[&pslider](int i){
qDebug()<<i;
});
qDebug()<<pslider->value();
layout->addWidget(pslider);
this->setFixedSize(300,300);
this->show();
}
进度条QProgressBar
文本,进度,那就提供了范围,文本的格式
#功能设置
函数 | 功能 |
---|---|
void setAlignment(Qt::Alignment alignment) | 对齐方式 |
void setFormat(const QString &format) | 文本格式,可重写 |
void setInvertedAppearance(bool invert) | 反向进度读取 |
void setTextDirection(QProgressBar::Direction textDirection) | 文字方向 |
void setTextVisible(bool visible) | 文字可见 |
#slots
void reset()
void setMaximum(int maximum)
void setMinimum(int minimum)
void setOrientation(Qt::Orientation)//水平还是垂直
void setRange(int minimum, int maximum)
void setValue(int value)
#signals
void valueChanged(int value)
/*
* 进度条
* 方向,范围,显示方式,水平,对齐
*
* 程序在qt creator5.7运行,在第一个connect处发现申请内存异常
* 加上一个语句就不出现运行时内存异常的错误
*/
mywidget::mywidget()
{
setWindowTitle("my widget test");
QVBoxLayout *layout=new QVBoxLayout(this);
QTimer *ptimer= new QTimer(this);
// 滑动条
QProgressBar *ppro_bar = new QProgressBar(this);
ppro_bar->setOrientation(Qt::Horizontal); // 水平方向
ppro_bar->setMinimum(0); // 最小值
ppro_bar->setMaximum(100); // 最大值
ppro_bar->setValue(50); // 当前进度
ppro_bar->setInvertedAppearance(true); // 反向读取
ppro_bar->setTextDirection(QProgressBar::BottomToTop);//文字旋转了
//设置显示文本的格式
qDebug()<<" ";//加上这个程序没出现运行时内存分配异常
connect(ptimer,&QTimer::timeout,[&ppro_bar]{
ppro_bar->setValue((ppro_bar->value())+10);
if(ppro_bar->value()>=100)ppro_bar->setValue(0);
});
connect(ppro_bar,static_cast<void (QProgressBar::*)(int)>(&QProgressBar::valueChanged),[&ppro_bar]{
ppro_bar->setFormat(QString("当前的值:%1%").
arg(QString::number(ppro_bar->value()-ppro_bar->minimum(),10)));
});
ptimer->start(1000);
layout->addWidget(ppro_bar);
this->setFixedSize(300,300);
this->show();
}
QScrollArea
he QScrollArea class provides a scrolling view onto another widget.
可以滚动的区域
#功能设置
函数 | 描述 |
---|---|
void ignment(Qt::Alignment) | 对齐方式 |
void setWidget(QWidget *widget) | addwidget |
void setWidgetResizable(bool resizable) | 自动调整大小 |
/*
* 滚动区域(失败的程序,随便看看代码就好)
* setwidget
*/
mywidget::mywidget()
{
setWindowTitle("my widget test");
QVBoxLayout *layout=new QVBoxLayout(this);
//滚动区域
QScrollArea *pscroll_area=new QScrollArea(this);
QLabel *plabel=new QLabel;
QPixmap pixmap(":/image/wz2.jpg");
pixmap.scaled(0.5,1);
plabel->setPixmap(pixmap);
pscroll_area->setWidget(plabel); //addwidget
pscroll_area->setAlignment(Qt::AlignCenter);
// pscroll_area->widget()->resize(200,200);//手动调节大小
pscroll_area->setWidgetResizable(true); // 自动调整大小
layout->addWidget(pscroll_area);
this->setFixedSize(300,300);
this->show();
}
QToolBox
The QToolBox class provides a column of tabbed widget items.
提供的是一个储存widget的列表
既然是储存,那就和数组差不多的原理,可以添加,插入,减少元素,同时可以快速找到元素,元素的数量,
#具备的函数
函数 | 描述 |
---|---|
int addItem(QWidget *widget, const QIcon &iconSet, const QString &text) | 添加元素 |
int addItem(QWidget *w, const QString &text) | |
int count() const | 元素的数量 |
int currentIndex() const | 现在的index |
QWidget * currentWidget() const | 现在的widget |
int indexOf(QWidget *widget) const | 返回查找的widget的位置 |
int insertItem(int index, QWidget *widget, const QIcon &icon, const QString &text) | 插入 |
int insertItem(int index, QWidget *widget, const QString &text) | |
bool isItemEnabled(int index) const | |
QIcon itemIcon(int index) const | 返回icon |
QString itemText(int index) const | 返回text |
QString itemToolTip(int index) const | 返回提示 |
void removeItem(int index) | 移除 |
void setItemEnabled(int index, bool enabled) | |
void setItemIcon(int index, const QIcon &icon) | 设置icon |
void setItemText(int index, const QString &text) | 设置text |
void setItemToolTip(int index, const QString &toolTip) | 设置提示 |
void setCurrentIndex(int index) | 设置现在的index,slot |
#signals
void currentChanged(int index)
#include "mywidget.h"
#include "loadstyle.h"
#include<QVBoxLayout>
#include<QString>
#include<QPixmap>
#include<QLabel>
#include<QVBoxLayout>
#include<QDebug>
#include<QTimer>
#include<QHBoxLayout>
#include<QStringList>
#include<QScrollArea>
#include<QDoubleSpinBox>
#include<QToolbox>
#include<QGroupBox>
#include<QLabel>
/*
* 三个分组,每个组5人
*
*/
mywidget::mywidget()
{
setWindowTitle("my widget test");
QVBoxLayout *layout=new QVBoxLayout(this); //整体的布局
QToolBox *ptool_box=new QToolBox(this);
QStringList groups; //分组的名称
groups<<"猴子1"<<"猴子2"<<"猴子3";
for(int i=0;i<3;i++)
{
QGroupBox *pgroup=new QGroupBox(this); //分组
QVBoxLayout *pvbox_layout=new QVBoxLayout(pgroup);
for(int j=0;j<5;j++)
{
pvbox_layout->addWidget(initperson(j));
}
ptool_box->addItem(pgroup,groups.at(i));
}
layout->addWidget(ptool_box);
this->setFixedSize(400,500);
this->show();
}
QWidget *mywidget::initperson(const int i)
{
QWidget *person=new QWidget(this);
QHBoxLayout *phbox_layout=new QHBoxLayout();
QVBoxLayout *pvbox_layout=new QVBoxLayout();
QLabel *phead=new QLabel(this);
QLabel *pname=new QLabel(this);
QLabel *psay=new QLabel(this);
QPixmap ppixmap(":/image/hz"+QString::number(i+1,10)+".jpg");
ppixmap=ppixmap.scaled(QSize(100,100),Qt::KeepAspectRatio);
phead->setPixmap(ppixmap);
pname->setText("孙悟空"+QString::number(i+1,10));
psay->setText("我是第"+QString::number(i+1,10)+"个最好的孙悟空");
pvbox_layout->addWidget(pname);
pvbox_layout->addWidget(psay);
phbox_layout->addWidget(phead);
phbox_layout->addLayout(pvbox_layout);
person->setLayout(phbox_layout);
person->setFixedSize(300,100);
return person;
}