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);
|
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ui->spinPrice->setDecimals(2); ui->spinTotal->setDecimals(2); ui->spinDec->setStepType(QAbstractSpinBox::AdaptiveDecimalStepType); ui->spinBin->setRange(0, 65535); ui->spinBin->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); ui->spinBin->setRange(0, 65535); ui->spinBin->setDisplayIntegerBase(2); ui->spinHex->setRange(0, 65535); ui->spinHex->setDisplayIntegerBase(16); int num = ui->spinNum->value(); float price = ui->spinPrice->value(); float total = num * price; ui->spinTotal->setValue(total); qDebug(ui->spinDec->cleanText().toLocal8Bit().data());
|
按钮类
普通按钮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);
|
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| ui->editInput->setAlignment(Qt::AlignLeft); ui->editInput->setAlignment(Qt::AlignCenter); ui->editInput->setAlignment(Qt::AlignRight); QFont font = ui->editInput->font(); font.setBold(checked); ui->editInput->setFont(font); QFont font = ui->editInput->font(); font.setItalic(checked); ui->editInput->setFont(font); QFont font = ui->editInput->font(); font.setUnderline(checked); ui->editInput->setFont(font); ui->editInput->setReadOnly(checked); ui->editInput->setEnabled(checked); ui->editInput->setClearButtonEnabled(checked); QPalette plet = ui->editInput->palette(); plet.setColor(QPalette::Text, Qt::black); ui->editInput->setPalette(plet);
|
滑动输入类
滑动条QSlider类、卷滚条QScrollBar类、表盘QDial类,都有共同的父类QAbstractSlider。进度条QProgressBar的父类为QWidget。常用属性有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| int minimum/maximum 数据范围最小/大值 默认0~99 int singleStep 变化最小数值 默认1 int pageStep PgUp或PgDn是变化数值 默认10 int value 组件当前值 int sliderPosition 滑块位置 tracking为true时等于value bool tracking 为true则sliderPosition随value改变 Qt::Orientation orientation 水平/垂直方向 bool invertedAppearance 反向 bool invertedControls 反向按键
QSlider特有: QSlider::TickPosition tickPosition 标尺刻度显示位置 tickInterval 标尺刻度间隔值 设0在singleStep和pageStep之间自动选择
QDial特有: notchesVisible 外围小刻度线是否可见 notchTarget 表盘刻度间隔像素值 wrapping 表盘首尾可读是否连贯 默认false首尾不相连
QPrograssBar相关: textDirection 文字方向 仅垂直进度条时使用 从上往下或从下往上 format 文字格式 默认%p%百分比 %v当前值 %m总步数
|
常用信号有:
1 2 3 4 5 6
| void actionTriggered(int action); void rangeChanged(int min,int max); void sliderMoved(int value); void sliderPressed(); void sliderReleased(); void valueChanged(int value);
|
常用方法:
1 2 3 4 5 6 7 8 9 10
| void setRange(int min,int max); setvalue();
void setRange(int minimum,int maximum); void reset(void); setValue(); setTextVisible(); setInvertedAppearance(); setFormat();
|
示例:
1 2 3 4 5
| ui->progressBar->setValue(value); ui->progressBar->setTextVisible(checked); ui->progressBar->setInvertedAppearance(checked); ui->progressBar->setFormat("%p%"); ui->progressBar->setFormat("%v");
|
日期时间类
有时间数据QTime类、日期数据QDate类、日期时间数据QDateTime类用于维护日期时间数据,他们没有父类,仅用于存储数据。日期时间控件类有时间组件QTimeEdit类、日期组件QDateEdit类、日期时间组件QDateTimeEdit类、日历组件QCalendarWidget类。
QTime类用于存储和操作时间数据,使用24小时制,常用方法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <QTime> QTime::QTime(int h,int m,int s=0,int ms=0); static QTime QTime::currentTime(); int hour(); int minute(); int second(); int msec(); bool setHMS(int h,int m,int s,int ms=0); int msecsSinceStartOfDay(); QTime addSecs(int s); int secsTo(QTime t); QString toString(const QString &format);
QTime TM1(13,24,5); QString str=TM1.toString("HH:mm:ss"); QTime TM2=TM1.addSecs(150); TM2=QTime::currentTime(); printf("%d %d %d %d",TM2.hour(),TM2.minute(),TM2.second(),TM2.msec());
|
QDate类用于存储和操作日期数据,常用方法有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| QDate::QDate(int year,int month,int day); static QDate QDate::currentDate(); int year(); int month(); int day(); int dayOfWeek(); int dayOfYear(); bool setDate(int year,int month,int day); void getDate(int* year,int* month,int* day); QDate addYears(int nyears); QDate addMonths(int nmonths); QDate addDays(qint64 ndays); qint64 daysTo(QDate d); QString toString(const QString &format); static bool QDate::isLeapYear(int year);
QDate DT(2021,8,29); QString str=DT.toString("yyyy年MM月dd日");
|
QDateTime类包含日期时间数据,很多函数同QDate和QTime,其他常用函数如下,每个函数原型有很多重载,这里不列出参数。
1 2 3 4 5 6 7 8 9 10 11
| QDate date(); QTime time(); qint64 toMSecsSinceEpoch(); void setMSecsSinceEpoch(qint64 msecs); qint64 toSecsSinceEpoch(); void setSecsSinceEpoch(qint64 secs); QString toString(const QString &format,QCalendar cal=QCalendar()); QDateTime fromString(const QString &string,const QString &format,QCalendar cal=QCalendar()); QDateTime toUTC(); static QDateTime QDateTime::currentDateTime(); static QDateTime QDateTime::currentDateTimeUtc();
|
常用格式字符串有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| d 天 1~31 dd 天 01~31 M 月 1~12 MM 月 01~12 yy 年 00~99 yyyy 年 2016 h 小时 0~23或1~12 hh 小时 00~23或01~12 H 小时 0~23 HH 小时 00~23 m 分钟 0~59 mm 分钟 00~59 s 秒 0~59 ss 秒 00~59 z 毫秒 0~999 zzz 毫秒 000~999 AP或A AM/PM ap或a am/pm
|
QDateTimeEdit是QTimeEdit和QDateEdit的父类,而QDateTimeEdit的父类是QAbstractSpinBox。例如QDateTimeEdit分为小时、分钟、秒3个输入段,常见属性有:
1 2 3 4
| QDateTimeEdit::Section currentSection //光标所在输入段 currentSectionIndex //同上 序号 bool calendarPopup //是否允许弹出日历选择框 displayFormat //日期时间数据显示格式
|
常见方法有:
1 2 3 4 5 6
| QDateTime dateTime(); void setDateTime(const QDateTime &dateTime); QDate date(); void setDate(QDate date); QTime time(); void setTime(QTime time);
|
常见信号有:
1 2 3
| void dateChanged(QDate date); void timeChanged(QTime time); void dateTimeChanged(const QDateTime &datetime);
|
QCalendarWidget类用于选择日期,常用属性略,常用接口如下:
1 2 3 4
| void showToday(); void showSelectedDate(); QDate selectedDate(); void setSelectedDate(QDate date);
|
常用信号有:
1 2 3 4
| void activated(QDate date); void clicked(QDate date); void currentPageChanged(int year,int month); void selectedChanged();
|
示例:
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| QDateTime curDateTime = QDateTime::currentDateTime(); ui->timeEdit->setTime(curDateTime.time()); ui->editTime->setText(curDateTime.toString("hh:mm:ss")); ui->dateEdit->setDate(curDateTime.date()); ui->editDate->setText(curDateTime.toString("yyyy-MM-dd")); ui->dateTimeEdit->setDateTime(curDateTime); ui->editDateTime->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss")); QString str = ui->editTime->text(); QTime tm = QTime::fromString(str, "hh:mm:ss"); ui->timeEdit->setTime(tm); QString str = ui->editDate->text(); QDate dt = QDate::fromString(str, "yyyy-MM-dd"); ui->dateEdit->setDate(dt); QDateTime datetime = QDateTime::fromString(str, "yyyy-MM-dd hh:mm:ss"); ui->dateTimeEdit->setDateTime(datetime); QDate dt = ui->calendarWidget->selectedDate(); QString str = dt.toString("yyyy年M月d日"); ui->editCalendar->setText(str); QTime TM1(13, 24, 5); QString str = TM1.toString("HH:mm:ss"); qDebug("Original time= %s", str.toLocal8Bit().data()); QTime TM2 = TM1.addSecs(150); str = TM2.toString("HH:mm:ss"); qDebug("150s later, time= %s", str.toLocal8Bit().data()); TM2 = QTime::currentTime(); str = TM2.toString("HH:mm:ss zzz"); qDebug("Current time= %s", str.toLocal8Bit().data()); qDebug("Hour= %d", TM2.hour()); qDebug("Minute= %d", TM2.minute()); qDebug("Second= %d", TM2.second()); qDebug("MSecond= %d", TM2.msec()); QDate DT1(2021, 7, 6); QString str = DT1.toString("yyyy-MM-dd"); qDebug("DT1= %s", str.toLocal8Bit().data()); QDate DT2; DT2.setDate(2021, 8, 25); str = DT2.toString("yyyy-MM-dd"); qDebug("DT2= %s", str.toLocal8Bit().data()); qDebug("Days between DT2 and DT1= %d", DT2.daysTo(DT1)); DT2 = QDate::currentDate(); str = DT2.toString("yyyy-MM-dd"); qDebug("Current date= %s", str.toLocal8Bit().data()); qDebug("Year= %d", DT2.year()); qDebug("Month= %d", DT2.month()); qDebug("Day= %d", DT2.day()); qDebug("Day of week= %d", DT2.dayOfWeek()); QDateTime DT1 = QDateTime::currentDateTime(); QString str = DT1.toString("yyyy-MM-dd hh:mm:ss"); qDebug("DT1= %s", str.toLocal8Bit().data()); QDate dt = DT1.date(); str = dt.toString("yyyy-MM-dd"); qDebug("DT1.date()= %s", str.toLocal8Bit().data()); QTime tm = DT1.time(); str = tm.toString("hh:mm:ss zzz"); qDebug("DT1.time()= %s", str.toLocal8Bit().data()); qint64 MS = DT1.toSecsSinceEpoch(); qDebug("DT1.toSecsSinceEpoch()= %lld", MS); MS += 120; DT1.setSecsSinceEpoch(MS); str = DT1.toString("yyyy-MM-dd hh:mm:ss"); qDebug("DT1+120s= %s", str.toLocal8Bit().data());
|
QTimer/QElapsedTimer
QTimer类是软件定时器,父类是QObject,功能是设置以毫秒为单位的定时周期,进行连续定时或单次定时。定时溢出时发射timeout信号。QTimer常用属性有:
1 2 3 4 5 6 7 8 9 10 11 12
| int interval; bool singleShot; Qt::TimerType timerType; bool active; int remainingTime;
|
常用槽函数:
1 2 3
| void QTimer::start(); void QTimer::start(int msec); void QTimer::stop();
|
常用信号:
常用静态函数:
1 2 3 4 5 6 7 8
| void QTimer::singleShot( int msec, Qt::TimerType timerType, const QObject* receiver, const char* member );
QTimer::singleShot(1000,Qt::PreciseTimer,this,&Widget::do_timer_shot);
|
QElapsedTimer类是软件计时器,没有父类,用于计算两个事件的间隔时间,精度纳秒。常用接口函数有:
1 2 3 4 5
| #include <QElapsedTimer> void start(); qint64 elapsed(); qint64 nsecsElapsed(); qint64 restart();
|
QLCDNumber是模仿LCD数值显示的组件,可显示整数或浮点数,常用属性有:
1 2
| digitCount 数字位数 smallDecimalPoint 是否显示小数点 bool
|
示例:
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
| class Widget : public QWidget{ Q_OBJECT private: QTimer* m_timer; QElapsedTimer m_counter; public: private slots: void do_timer_timeout(); void do_timer_shot(); }; m_timer = new QTimer(this); m_timer->stop(); m_timer->setTimerType(Qt::CoarseTimer); QApplication::beep(); QTime curTime = QTime::currentTime(); ui->LCDHour->display(curTime.hour()); ui->LCDMin->display(curTime.minute()); ui->LCDSec->display(curTime.second()); if (m_timer->isSingleShot()) { int tmMsec = m_counter.elapsed(); QString str = QString("流逝的时间:%1毫秒").arg(tmMsec); ui->labElapsedTime->setText(str); ui->btnStart->setEnabled(true); ui->btnOneShot->setEnabled(true); ui->btnStop->setEnabled(false); }; int tmMsec = m_counter.elapsed(); QString str = QString("流逝的时间:%1毫秒").arg(tmMsec); m_timer->setInterval(ui->spinBoxIntv->value()); m_timer->setSingleShot(true); m_timer->setTimerType(Qt::PreciseTimer); m_timer->start(); m_counter.start(); m_timer->stop(); int tmMsec = m_counter.elapsed(); int ms = tmMsec % 1000; int sec = tmMsec / 1000; QTimer::singleShot(intv, Qt::PreciseTimer, this, &Widget::do_timer_shot); m_counter.start();
|
QComboBox
QComboBox是下拉列表框,可选择也可输入。下拉列表的每个列表项可存储一个或多个QVariant数据。常用属性有:
1 2 3 4 5 6 7 8 9
| bool editable 是否可编辑 false只能选择 true可输入 QString currentText 当前显示文字 int currentIndex 当前选中项序号 0开始 -1没项被选中 int maxVisibleItems 下拉列表显示的最大条数 默认10 超过后显示卷滚条 int maxCount 下拉列表项最大条数 QComboBox::InsertPolicy insertPolicy 用户编辑的新文字插入列表的方式 默认InsertAtBottom插入列表末尾 NoInsert不允许插入 QString placeholderText 占位文字 当currentIndex为-1时下拉列表框显示的文字 改文字不出现在下拉列表里 bool duplicatesEnabled 是否允许列表中出现重复项 int modelColumn 下拉列表中数据在数据模型中列编号 默认0
|
QCombox使用模型/视图结构存储和显示下拉列表数据,下拉列表数据实际存储在QStandardItemModel模型中,用QListView的子类组件显示。
常用信号如下,其中index为项序号,text为项文字:
1 2 3 4 5 6 7
| void activated(int index); void currentIndexChanged(int index); void currentTextChanged(const QString &text); void editTextChanged(const QString &text); void highlighted(int index); void textActivated(const QString &text); void textHighlighted(const QString &text);
|
常用操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| void addItem(const QString &text,const QVariant &userData=QVariant()); void addItem(const QIcon &icon,const QString &text,const QVariant &userData=QVariant()); void addItems(const QStringList &texts); void insertItem(int index,const QString &text,const QVariant &userData=QVariant()); void insertItem(int index,const QIcon &icon,const QString &text,const QVariant &userData=QVariant()); void insertItems(int index,const QStringList &list); void removeItem(int index); void clear(void); int count(void); int currentIndex(void); QString currentText(void); QVariant currentData(int role=Qt::UserRole); QString itemText(int index); QIcon itemIcon(int index); QVariant itemData(int index,int role=Qt::UserRole); void setItemText(int index,const QString &text); void setItemIcon(int index,const QIcon &icon); void setItemData(int index,const QVariant &value,int role=Qt::UserRole);
|
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| QIcon icon; icon.addFile(":/images/icons/aim.ico"); ui->comboBox->clear(); for (int i = 0; i < 20; i++) { ui->comboBox->addItem(icon, QString("Item %1").arg(i)); ui->comboBox->addItem(QString("Item %1").arg(i)); }; QStringList strList; strList<<"北京"<<"上海"<<"天津"<<"河北省"<<"山东省"<<"山西省"; ui->comboBox->addItems(strList); ui->comboBox->setEditable(checked);
QMap<QString, int> City_Zone; City_Zone.insert("北京", 10); City_Zone.insert("上海", 21);
ui->comboBox2->clear(); foreach(const QString& str, City_Zone.keys()) ui->comboBox2->addItem(str, City_Zone.value(str)); Q_UNUSED(index); QString city = ui->comboBox2->currentText(); QString zone = ui->comboBox2->currentData().toString(); ui->plainTextEdit->appendPlainText(city + ": 区号 = " + zone);
|
QMainWindow
QMainWindow是主窗口类,有菜单栏、工具栏、状态栏等界面元素。设计菜单栏、工具栏、按钮下拉菜单、组件快捷菜单时,需要QAction类。QAction对象时实现某个功能的动作,称为Action。Action编辑器中新建时有若干选项。