前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt中使用标准输入框

Qt中使用标准输入框

作者头像
mythsman
发布2022-11-14 14:54:40
1.3K0
发布2022-11-14 14:54:40
举报
文章被收录于专栏:mythsman的个人博客

这一节主要讲一下标准输入框的使用,Qt提供了一个QInputDialog类,这个类提供了几个预先设定好的常用输入对话框。 比如:

  • 需要输入文本的时候,他将QlineEdit的一系列控件封装到QInputDialog::getText()中;
  • 需要输入选择条目的时候,他将QComboBox的一系列控件封装到QInputDialog::getItem()中;
  • 需要输入数值的时候,他将QSpinbox的一系列控件封装到QInputDialog::getInt()或QInputDialog::getDouble()中。

以下依旧是用程序来说明:

Dialog.pro

代码语言:javascript
复制
#-------------------------------------------------
#
# Project created by QtCreator 2015-10-24T17:32:35
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Dialog
TEMPLATE = app

SOURCES += main.cpp
        dialog.cpp

HEADERS  += dialog.h

dialog.h

代码语言:javascript
复制
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QGridLayout>
#include<QPushButton>
#include<QLabel>
#include<QInputDialog>
class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
public:
   QGridLayout *layout;
   QPushButton *nameButton,*sexButton,*ageButton,*statureButton;
   QLabel *label1,*label2,*label3,*label4,*nameLabel,*sexLabel,*ageLabel,*statureLabel;
private slots:
    //设置按钮单击信号的槽
    void slotName();
    void slotSex();
    void slotAge();
    void slotStature();
};

#endif // DIALOG_H

dialog.cpp

代码语言:javascript
复制
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle("Input Dialog");
    label1=new QLabel("姓名:");
    label2=new QLabel("性别:");
    label3=new QLabel("年龄:");
    label4=new QLabel("身高:");

    //创建显示标签,用于显示已选择的信息。
    nameLabel=new QLabel("LiMing");
    /**

      以下调用了QLabel的setFrameStyle()方法,设置QLabel的样式,这里有两个枚举类型--QFrame::Shape和QFrame::Shadow

      QFrame::Shape定义了QFrame的框架所使用的外形。当前定义的效果有:

      QFrame::NoFrame            不画任何东西
      QFrame::Box                在它的内容周围画一个框
      QFrame::Panel              画一个平板使内容看起来凸起或者凹陷
      QFrame::WinPanel           像Panel,但QFrame绘制三维效果的方式和Microsoft Windows 95(及其它)的一样
      QFrame::ToolBarPanel       调用QStyle::drawToolBarPanel()
      QFrame::MenuBarPanel       调用QStyle::drawMenuBarPanel()
      QFrame::HLine              绘制一个水平线,但没有框任何东西(作为分隔是有用的)
      QFrame::VLine              绘制一个竖直线,但没有框任何东西(作为分隔是有用的)
      QFrame::StyledPanel        调用QStyle::drawPanel()
      QFrame::PopupPanel         调用QStyle::drawPopupPanel()

      QFrame::Shadow这个枚举类型定义了QFrame的框架所使用的外形。当前定义的效果有:

      QFrame::Plain     框架和内容看来和周围一样高
      QFrame::Raised    框架和内容看起来凸起
      QFrame::Sunken    框架和内容看起来凹陷
      QFrame::MShadow   内部的,对于阴影的掩码

      */

    nameLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);//这里设置了凹陷的效果
    sexLabel=new QLabel("man");
    sexLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    ageLabel=new QLabel("20");
    ageLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);
    statureLabel=new QLabel("178");
    statureLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);

    nameButton=new QPushButton;
    nameButton->setText("...");
    sexButton=new QPushButton;
    sexButton->setText("...");
    ageButton=new QPushButton;
    ageButton->setText("...");
    statureButton=new QPushButton;
    statureButton->setText("...");

    layout=new QGridLayout(this);
    layout->addWidget(label1,0,0);
    layout->addWidget(nameLabel,0,1);
    layout->addWidget(nameButton,0,2);
    layout->addWidget(label2,1,0);
    layout->addWidget(sexLabel,1,1);
    layout->addWidget(sexButton,1,2);
    layout->addWidget(label3,2,0);
    layout->addWidget(ageLabel,2,1);
    layout->addWidget(ageButton,2,2);
    layout->addWidget(label4,3,0);
    layout->addWidget(statureLabel,3,1);
    layout->addWidget(statureButton,3,2);

    //设置各个Grid列的相对比例,这里是1:4:2
    layout->setColumnStretch(0,1);
    layout->setColumnStretch(1,4);
    layout->setColumnStretch(2,1);

    layout->setMargin(10);
    //设置窗口的固定大小
    this->setFixedSize(300,120);

    connect(nameButton,SIGNAL(clicked()),this,SLOT(slotName()));
    connect(sexButton,SIGNAL(clicked()),this,SLOT(slotSex()));
    connect(ageButton,SIGNAL(clicked()),this,SLOT(slotAge()));
    connect(statureButton,SIGNAL(clicked()),this,SLOT(slotStature()));
}

Dialog::~Dialog()
{

}

void Dialog::slotName(){
    bool ok;

    /*
    static QString QInputDialog::getText ( QWidget * parent,const QString & title,const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal,const QString & text = QString(), bool * ok = 0, Qt::WindowFlags flags = 0 );

    第一个参数parent,也就是那个熟悉的父组件的指针;
    第二个参数title就是对话框的标题;
    第三个参数label是在输入框上面的提示语句;
    第四个参数mode用于指明这个QLineEdit的输入模式,取值范围是QLineEdit::EchoMode,默认是Normal,也就是正常显示,你也可以声明为password,这样就是密码的输入显示了;
    第五个参数text是QLineEdit的默认字符串;
    第六个参数 ok是可选的,如果非NLL,则当用户按下对话框的OK按钮时,这个bool变量会被置为true,可以由这个去判断用户是按下的OK还是Cancel,从而获知这个text是不是有意义;
    第七个参数flags用于指定对话框的样式。
    */

    QString name=QInputDialog::getText(this,"Username","Please input the name:",QLineEdit::Normal,nameLabel->text(),&ok);
    if(ok&&!name.isEmpty()){
       nameLabel->setText(name);
    }
}

void Dialog::slotSex(){
    QStringList list;
    list<<"male"<<"female";//给QStringList 赋值
    bool ok;

    /*
 static QString QInputDialog::getText ( QWidget * parent,const QString & title,const QString &label, const QStringList &list,int current=0,bool editable=true, bool * ok = 0, Qt::WindowFlags flags = 0 );

   第一个参数parent,也就是那个熟悉的父组件的指针;
   第二个参数title就是对话框的标题;
   第三个参数label是在输入框上面的提示语句;
   第四个参数QStringList用于指定需要显示的条目是一个QStringList 对象,
   第五个参数current是QStringList 中默认的条目的下标;
   第六个参数editable是设置文字是否可以编辑
   第七个参数 ok是可选的,如果非NLL,则当用户按下对话框的OK按钮时,这个bool变量会被置为true,可以由这个去判断用户是按下的OK还是Cancel,从而获知这个text是不是有意义;
   第八个参数flags用于指定对话框的样式。
 */
    QString sex=QInputDialog::getItem(this,"Sex","Please choose the sex",list,0,false,&ok);
    if(ok){
        sexLabel->setText(sex);
    }
}

void Dialog::slotAge(){
    bool ok;
     /*
 static QString QInputDialog::getText ( QWidget * parent,const QString & title,const QString &label, int value ,int minValue=-2147483647, int maxValue = 2147483647, int step=1, bool * ok = 0, Qt::WindowFlags flags = 0 );

   第一个参数parent,也就是那个熟悉的父组件的指针
   第二个参数title就是对话框的标题
   第三个参数label是在输入框上面的提示语句
   第四个参数value表示默认值
   第五个参数minValue表示最小值
   第六个参数maxValue表示最大值
   第七个参数step表示各个选项的间隔
   第八个参数ok是可选的,如果非NLL,则当用户按下对话框的OK按钮时,这个bool变量会被置为true,可以由这个去判断用户是按下的OK还是Cancel,从而获知这个text是不是有意义;
   第九个参数flags用于指定对话框的样式。
 */

    int age=QInputDialog::getInt(this,"User age","Please input the age",ageLabel->text().toInt(),0,150,1,&ok);
    if(ok){
        ageLabel->setText(QString().setNum(age));//将数字变成文本
    }
}

void Dialog::slotStature(){
    bool ok;

    //QInputDialog::getDouble使用方法如getInt
    double stature=QInputDialog::getDouble(this,"User stature","Please input the stature",statureLabel->text().toDouble(),0,240.00,1,&ok);//这里文本变成double要进行转换
    if(ok){
        statureLabel->setText(QString().setNum(stature));
    }
}

main.cpp

代码语言:javascript
复制
#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    return a.exec();
}

运行截图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Dialog.pro
  • dialog.h
  • dialog.cpp
  • main.cpp
  • 运行截图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档