QT学习笔记3(常用界面组件 QLineEdit、QTimer、QComboBox )

QT提供的默认基类只有QMainWindow、QWidget和QDialog这三基类,QMainWindow是带有菜单栏和工具栏的主窗口类;QDialog是各种对话框的基类;所有的窗口部件都继承自QWidget。

一、字符串的输入与输出

qt界面设计最常用的字符串输入输出组件为QLable和QLineEdit,QLable用来显示字符串,QLineEdit用来显示和输入字符串。

1、读取和设置显示文字的格式。

QString text() const

void setText(const QString &)

2、普通数值与字符串之间的转换

点击按钮计算,获取输入的数量和单价,相乘计算后将结果显示到文本框里。

槽函数设计:

void Widget::on_btnCal_clicked()
{ //计算 按键单击响应
    int num=ui->editNum->text().toInt(); //读取字符串为整数  editNum为组件名 
    float price=ui->editPrice->text().toFloat();//读取字符串为浮点数 editPrice为组件名

    float total=num*price;//相乘计算
    QString str;
//    str=str.setNum(total,'f',2); //浮点数2位小数
    str=str.sprintf("%.2f",total); //格式化输出浮点数
    ui->editTotal->setText(str);//在文本框里显示  editTotal为组件名
}

(1)QString类从字符串转换为整数的函数有:以下函数参数缺省时表示把字符串转为整数类型

    int toInt(bool * ok= Q_NULLPTR,int base =10 )  const

   long toLong(bool * ok= Q_NULLPTR,int base =10 )  const

   short toShort(bool * ok= Q_NULLPTR,int base =10 )  const

   uint toUInt(bool * ok= Q_NULLPTR,int base =10 )  const

   ulong toUlong(bool * ok= Q_NULLPTR,int base =10 )  const

QString类从字符串转换为浮点数的函数

 double toDouble(bool * ok= Q_NULLPTR,int base =10 )  const

 float toFloat(bool * ok= Q_NULLPTR,int base =10 )  const

(2)进制之间的转换

将一个整数转换为不同进制的字符串,主要使用Qstring类的setNum()或 number()

Qstring &setNum(int n,int base =10)

Qstring number(int n,int base =10)

n是待转换的整数,base是使用的进制,可以指定为十六进制或二进制。

    //读取十进制数,转换为16进制
    int val=ui->editDec->text().toInt();//读取十进制数
    QString str=QString::number(val,16);// 显示为16进制的字符串
//    str=str.setNum(val,16);//16进制

 //读取二进制数,转换为10进制的数
  bool ok;
  int val=ui->editBin->text().toInt(&ok,2);//以二进制数读
//    str=str.setNum(val,2);//显示为2进制字符串
  QString str=QString::number(val,10);//数字显示为10进制字符串
//读取16进制数,转换为10进制的数
 bool ok;
 int val=ui->editHex->text().toInt(&ok,16);//以十六进制数读入
 QString str=QString::number(val,10);// 显示为10进制字符串
//    str=str.setNum(val,10);//显示为10进制字符串

二、定时器的使用

 Qt中的定时器类时QTimer,不是一个可见的界面组件,在UI设计器的组件面板中里没有。

使用步骤

(1)窗口类中添加定义

class Dialog : public QDialog
{
      Q_OBJECT
    private:
        QTimer *fTimer;  //定时器
        QTime   fTimeCounter;//计时器

    private slots:
        void on_timer_timeout(); //定时器中断处理槽函数,手工定义
        void on_btnSetIntv_clicked();   //设置周期  按键
        void on_btnStart_clicked();  //开始 定时器 按键
        void on_btnStop_clicked();      //停止定时器按键
}

(2)窗体类构造函数创建定时器,并进行信号与槽的关联

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

    fTimer=new QTimer(this);  //创建定时器
    fTimer->stop();
    fTimer->setInterval(1000);//设置定时周期,单位:毫秒
    connect(fTimer,SIGNAL(timeout()),this,SLOT(on_timer_timeout())); //关联定时器的信号与槽
}
void Dialog::on_timer_timeout()
{ //定时器中断响应槽函数
    QTime curTime=QTime::currentTime(); //获取当前时间
    ui->LCDHour->display(curTime.hour()); //显示  小时
    ui->LCDMin->display(curTime.minute());//显示  分钟
    ui->LCDSec->display(curTime.second());//显示  秒
    int va=ui->progressBar->value(); //读取progressBar的数值
    va++;
    if (va>100)
        va=0;
    ui->progressBar->setValue(va); //设置progressBar的数值
}
void Dialog::on_btnSetIntv_clicked()
{ //设置定时器周期
    fTimer->setInterval(ui->spinBoxIntv->value()); //设置定时器的周期
}
void Dialog::on_btnStart_clicked()
{
    fTimer->start();//定时器开始工作
    fTimeCounter.start();//计时器开始工作
//更新各按键的状态
    ui->btnStart->setEnabled(false);
    ui->btnStop->setEnabled(true);
    ui->btnSetIntv->setEnabled(false);
}
void Dialog::on_btnStop_clicked()
{
    fTimer->stop(); //定时器停止

    int tmMsec=fTimeCounter.elapsed();//毫秒数
    int ms=tmMsec%1000; //余数毫秒
    int sec=tmMsec/1000; //整秒

    QString str=QString::asprintf("流逝时间:%d 秒,%d 毫秒",sec,ms);
    ui->LabElapsTime->setText(str); //显示流逝的时间

    ui->btnStart->setEnabled(true); //更新按键状态
    ui->btnStop->setEnabled(false);
    ui->btnSetIntv->setEnabled(true);
}

三、QComboBox下拉列表框组件的使用

可以提供一个下拉列表供用户选择,也可以直接当做一个QLineEdit用作输入。

使用方法:

(1)拖一个QComboBox组件到设计窗口

双击组件,可以为其添加选项

(2)用代码添加简单项

以下有两种方法添加到下拉框的选项中

void Widget::on_btnIniItems_clicked()
{ //"初始化列表"按键
    QIcon   icon;
    icon.addFile(":/images/icons/aim.ico");

    ui->comboBox->clear(); //清除列表
    for (int i=0;i<20;i++)
        ui->comboBox->addItem(icon,QString::asprintf("Item %d",i)); //添加一个字符串
//        ui->comboBox->addItem(QString::asprintf("Item %d",i)); //添加一个字符串

//    QStringList strList;
//    strList<<"北京"<<"上海"<<"天津"<<"河北省"<<"山东省"<<"山西省";
//    ui->comboBox->addItems(strList);
}

(3)添加具有用户数据的项

void Widget::on_btnIni2_clicked()
{//初始化具有自定义数据的comboBox
//QMap自动根据 key排序
    QMap<QString, int> City_Zone;
    City_Zone.insert("北京",10);
    City_Zone.insert("上海",21);
    City_Zone.insert("天津",22);
    City_Zone.insert("大连",411);
    City_Zone.insert("锦州",416);
    City_Zone.insert("徐州",516);
    City_Zone.insert("福州",591);
    City_Zone.insert("青岛",532);

    ui->comboBox2->clear();

使用迭代器
//    QMapIterator<QString, int> item(City_Zone);
//    while (item.hasNext()) {
//        item.next();
//        ui->comboBox2->addItem(item.key(),
//                               QVariant::fromValue(item.value()));
//    }

    foreach(const QString &str,City_Zone.keys())
        ui->comboBox2->addItem(str,City_Zone.value(str));
}

(4) QComboBox列表项的访问

当QComboBox组件添加多个下拉选项的内容之后,如何得到用户选择的下拉序号或者选择的内容。

访问项的一些函数:

  • int currentIndex(),返回当前项的序列号,第一个项的序列号为0
  • QString currentText(),返回当前项的文字
  • QString itemData(int index);返回指定索引号的项的文字
  • int count();返回项的个数

在一个QComboBox组件上选择项发生改变时,会发射如下两个信号

void currentIndexChanged(int index)   //传递当前索引号

void currentIndexChanged(const QString &text)  //传递当前文字

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值