Qt6开发入门-常用控件简介
QString字符串
QString存储一串字符,每个字符是一个QChar类型的数据。QChar使用UTF-16编码,一个字符包含2字节数据。对于超过65535的Unicode编码,QString使用两个连续的QChar字符表示。QString字符串中一个汉字是一个字符。例如:
1 2 3
| QString str="dimple,酒窝"; QChar ch0=str[0]; QChar ch7=str.at(7);
|
QChar类常用接口函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| bool isDigit(); bool isLetter(); bool isLetterOrNumber(); bool isLower(); bool isUpper(); bool isMark(); bool isNonCharacter(); bool isNull(); bool isNumber(); bool isPrint(); bool isPunct(); bool isSpace(); bool isSymbol(); bool isEmpty(); char toLatin1(); QChar toLower(); QChar toUpper(); char16_t unicode(); int size();
|
例如将Latin1转QChar字符:
1 2 3 4
| QString str="Dimple"; QChar chP=QChar::fromLatin1('P');
str[0]=chP;
|
例如用Unicode编码构造QChar字符:
1 2 3
| QString str="Hello,北京"; str[6]=QChar(0x9752); str[7]=QChar::fromUcs2(0x5C9B);
|
QChar的逻辑运算符是对UTF-16编码的大小比较。
其他字符串常用操作有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| QString str1="XXX",str2="XXX"; QString str3=str1+str2; str1.append(str2); str3.prepend(str2); QChar ch1=str1.front(),ch2=str1.back(); QString str1=ui->lineEdit->text(); QString str2=str1.first(2); str2=str1.last(3); int N=str1.lastIndexOf("\\"); QString str2=str1.mid(N+1,2); str2=str1.sliced(N+1); QString str2,str1="学生姓名,男,XXXX"; str2=str1.section(",",0,1); QString str1,str2=""; bool N=str1.isNull(); N=str2.isNull(); N=str1.isEmpty();N=str2.isEmpty(); str2.clear(); N=str2.isNull(); N=str1.count();N=str1.size();N=str1.length(); str2.resize(5,'0'); str1.fill('X'); str1.fill('A',2); str1.fill(QChar(0x54C8),3); N=str1.indexOf("Qt"); N=str1.indexOf("Qt",2); N=str1.lastIndexOf("\\"); N=str1.indexOf("Qt",2,Qt::CaseInsensitive); bool N2=str1.contains(".cpp"); N2=str1.contains(".cpp",Qt::CaseInsensitive); N2=str1.endsWith(".cpp",Qt::CaseInsensitive); N2=str1.startsWith(".cpp",Qt::CaseInsensitive); N=str1.count("Qt",Qt::CaseInsensitive); str2=str1.toUpper();str2=str1.toLower(); str2=str1.trimmed(); str2=str1.simplified(); str2=str1.chop(4); str2=str1.insert(N,"nt"); str2=str1.replace(pos,n,"ok"); str2=str1.replace('o','e'); str2=str1.remove(N,20); QString DeStr="的"; QChar DeChar=QChar(DeChar[0].unicode()); str2=str1.remove(DeChar);
|
如果需要自定义函数,可全部定义到MainWindow类中,并将声明添加到private部分。
QString中有些接口函数用于将字符串转为整数,定义如下:
1 2 3
| int toInt(bool *ok=nullptr,int base=10);
float toFloat(bool *ok=nullptr);
|
其中参数ok不为NULL时,返回转换是否成功,成功为true,失败为false并函数返回0。参数base表示使用的进制,可以是2~36。base为0时用C语言表示法,如“0x”开头是16进制,否则十进制。例如:
1 2 3 4 5 6 7 8 9
| QString str="153"; int N=str.toInt(); bool ok=false; stsr="FF"; N=str.toInt(&ok,16); str="10110111"; N=str.toInt(&ok,2); str="0x5F"; N=str.toInt(&ok,0);
|
将整数或浮点数转为字符串:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| QString &setNum(int n,int base=10); int N=243; QString str; str.setNum(N); str.setNum(N,16); str.setNum(N,2);
QString &setNum(float n,char format='g',int precision=6);
QString str; double num=1245.2783; str.setNum(num,'f',5); str.setNum(num,'E',5); str.setNum(num,'g',5); str.setNum(num,'g',3);
QString str=QString::number(245);
|
静态函数QString::asprintf
用于构造格式化输出各种数据的字符串,用法类似printf
。
1 2 3
| QString UPC="UPC"; QString str2=QString::asprintf("xxx %s",UPC.toLocal8Bit().data());
|
QString.arg
函数功能类似QString::asprintf
函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| QString arg(int a,int fieldWidth=0,int base=10,QChar fillChar=QLatin1Char(' ')); QString arg(const QString &a,int fieldWidth=0,QChar fillChar=QLatin1Char(' ')); QString arg(double a,int fieldWidth=0,char format='g',int precision=-1,QChar fillChar=QLatin1Char(' '));
int year=2021,month=8,day=3,base=10; QChar ch('0'); QString str1=QString("%1年%2月%3日").arg(year).arg(month,2,base,ch).arg(day,2,base,ch);
QString name="张三"; int age=25; QString str2=QString("xxx %1 xxx %2").arg(name).arg(age);
#include <QtMath> double pi=M_PI; int precision=8; QString str3=QString("pi=%1").arg(pi,0,'f',precision);
|
QLineEdit
两种操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| QString QLineEdit::text(); int num=ui->editNum->text().toInt(); void QLine::setText(const QString &); ui->editTotal->setText(str); ui->editInput->setAlignment(Qt::AlignLeft); ui->editInput->setAlignment(Qt::AlignCenter); ui->editInput->setAlignment(Qt::AlignRight); QFont font=ui->editInput->font(); font.setBold(true); font.setItalic(true); font.setUnderline(true); ui->editInput->setFont(font); ui->editInput->setReadOnly(true); ui->editInput->setEnabled(true); ui->editInput->setClearButtonEnabled(true); QPalette plet=ui->editInput->palette(); plet.setColor(QPalette:Text,Qt::black); ui->editInput->setPalette(plet);
|
当clearButtonEnabled属性为true则编辑框右端出现圆形按钮,点击后可清除编辑框内容。
QSpinBox和QDoubleSpinBox
QSpinBox用于输入输出整数,一般显示十进制数,也可按其他进制显示。QDoubleSpinBox用于输入输出浮点数。两者通用属性有:
1 2 3 4 5 6 7 8 9 10 11
| prefix/suffix 数字前/后缀 buttonSymbols 编辑框右侧调节按钮符号 可设置不显示调节按钮 text 只读 SpinBox显示的全部文字 包括前后缀 cleanText 只读 同上 不带前后缀和前后空格 minimum/maximum 数值范围最大/小值 singleStep 单击调节按钮的单步改变值 stepType 步长类型 value 当前显示值
displayIntegerBase QSpinBox特有 显示整数使用的进制 decimals QDoubleSpinBox特有 显示数值小数位数
|
QSpinBox对value属性读取和设置函数定义如下,QDoubleSpinBox同理,其他属性设置方法详情Qt帮助文档,如https://doc.qt.io/qt-6/zh/qspinbox.html 等。
1 2 3
| int QSpinBox::value(void); void QSpinBox::setValue(int val); void QSpinBox::setRange(int minimum,int maximum);
|
对于stepType属性,有以下两个枚举常量:
1 2
| QAbstractSpinBox::DefaultStep 默认步长 用singleStep设置固定步长 QAbstractSpinBox::AdaptiveDecimalStepType 自适应十进制步长 自动连续调整步长值为10^n 如value为0~10时singleStep为1 value为100~999时singleStep为10
|
QSpinBox有俩信号,QDoubleSpinBox同理:
1 2
| void QSpinBox::valueChanged(int i); void QSpinBox::textChanged(const QString &text);
|
按钮类
普通按钮QPushButton类、工具按钮QToolButton类、单选按钮QRadioButton类、复选框QCheckBox类,都有共同的父类QAbstractButton。QAbstractButton常用属性如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| QString text 显示文字 QIcon icon 图标 QKeySequence shortcut 快捷键 bool checkable 是否可复选 QPushButton默认false QRadioButton和QCheckBox默认true bool checked 是否复选的状态 bool autoExclusive 一个布局或容器内同类按钮是否互斥 QCheckBox默认false QRadioButton默认true bool autoRepeat 是否自动重复 为true则处于按下状态时重复发射clicked/pressed/released 初次重复延迟时间为autoRepeatDelay 重复周期为autoRepeatInterval 单位毫秒
QPushButton特有: bool autoDefault 是否为自动默认按钮 即获得焦点时变成默认按钮 窗口基类必须为QDialog bool default 是否为默认按钮 窗口基类必须为QDialog bool flat 为true时无边框 点击或复选时才显示边框
QCheckBox特有: tristate 是否允许3种复选状态 即Checked、Unchecked和PartiallyChecked
|
按钮可用isChecked
和setChecked
函数读取和设置复选状态,QCheckBox还可用checkState
和setCheckState
函数读取和设置复选状态。
按钮的常用信号如下:
1 2 3 4 5 6 7 8
| void clicked(void); void clicked(bool checked=false); void pressed(void); void released(void); void toggled(bool checked);
void QCheckBox::stateChanged(int state);
|
滑动输入类
滑动条QSlider类、卷滚条QScrollBar类、表盘QDial类,都有共同的父类QAbstractSlider。