Qt知识回顾(二)——窗口部件

信号与槽

  Qt使用信号和槽机制来完成对象之间的协同操作,信号与槽都是函数,比如单击窗口上的一个按钮后想要弹出一个对话框,就可以将这个按钮的单机信号和自定义的槽关联起来,在这个槽中创建一个对话框并显示它。
   槽的声明:槽一般使用slots关键字进行修饰, public slots: void showChildDialog();
   槽的定义:Qt Creator设计了一个快速添加定义的方法:单击showChildDialog()槽,同时摁下Alt+Enter键(也可以在函数上右击,在弹出的级联菜单中选择Refactor菜单项),便会自动创建槽的定义,只需要在其中添加代码即可。
   信号:信号指一个特殊的成员函数声明,其中函数的返回值是void类型,函数只能声明不能定义信号必须使用signals关键字进行声明函数的访问属性自动被设置为protected*只能通过emit关键字调用函数(发射信号)

信号与槽的关联
  1.connect(ui>showChildButton,&QPushButton::clicked,this,&MyWidget::showChildDialog);使用connect()函数将按钮的单击信号clicked()与新建的槽进行关联,这里clicked()信号在QPushButton类中定义,而connect()是QObeject类中的函数,因为Widget类继承自QObject,所以可以直接使用;这个函数的四个参数分别为发射信号的对象、发射的信号、接受信号的对象和要执行的槽
  2.自动关联,就是将关联函数整合到槽中命名中,比如前面的槽可以重命名为on_show-ChildButton_clicked(),就是由字符on、发射信号的部件对象名和信号名组成,这样就可以去掉connect()关联函数了。具体做法为:删除connect()函数,然后更改showChildDialog()槽的名字(先在showChildDialog上右击,然后在弹出的级联菜单中选择Refactor->Rename Symbol Under Curseor,或者按Ctrl+Shift+R快捷键。
  对于这两种关联方式,一般使用第一种,后一种形式很简便,用Qt设计器直接生成的槽就是使用这种方式,不过,对于不是在Qt设计器中往界面上添加的部件,就要在调用setupUi()函数前定义该部件,而且还要使用setObjectName()函数指定部件的对象名。

Qt设计器完成信号与槽的连接
  1单击设计器上方的Edit Signals/Slots图标,或者摁下快捷键F4,于是进入了部件的信号和槽的编辑模式,F3退出该编辑模式
  2是在设计器中直接进入相关信号的槽,这个与手写函数一样,用的就是自动关联。

窗口部件

基础窗口部件 QWidget    对话框QDialog   其他窗口部件

1. QWidget
   QWidget类是所有用户界面对象的基类,被称为基础窗口部件,QWidget提供了自我绘制和处理用户输入等基础功能,Qt提供的所有界面元素不是QWidget的子类就是与QWidget的子类相关联,要设计自己的窗口部件,可以继承自QWidget或者是他的子类。继承自QObject类和QPaintDevice类,其中QObject类是所有支持Qt对象模型的对象的基类,QPaintDevice类是所有可以绘制的对象的基类。
  至于QWidget类内的具体的函数,请看QWidget详细介绍

使用qDebug()函数:
  一种是不需要添加,直接将字符串当作参数传入qDebug()函数( qDebug(“x: %d”,x); )
  一种是需要添加,使用输出流的方式一次输入多个值,( qDebug()<<"x "<<x<<endl; )

2.对话框QDialog
  QDialog类是所有对话框窗口的基类,对话框窗口是一个经常用来完成短小任务或者和用户进行简单交互的顶层窗口。按照运行对话框时是否还可以和该程序的其他窗口进行交互,对话框常被分为两类:模态的和非模态的
  模态窗口:是在没有关闭它之前,不能再与同一个程序的其他窗口进行交互,比如新建项目时弹出的对话框;
  非模态窗口:既可以与它交互,也可以与同一程序中的其他窗口交互,比如Microsoft Word里的查找替换对话框。

基础使用:(包含头文件的基础上)
  1.QDialog 类的构造函数与 QWidget 类形式相同:QDialog (QWidget *parent = 0, Qt::WindowFlags f = 0);
  2.QDialog dialog(this); dialog.show();运行结果是一个窗口一闪而过,然后就只显示MyWidget窗口(即对应的this);这是因为对于一个函数中定义的变量,等这个函数执行后,他就会自动释放‘
  3.QDialog *dialog = new QDialog(this); dialog->show();运行结果是对话框显示出来,当把对话框关闭时,MyWidget窗口才弹出来;这是因为我们使用了QDialog对象的指针,并使用new运算符开辟了内存空间。
  4.QDialog dialog(this); dialog.exec();结果同上,这是因为调用exec()函数只有当对话框被关闭时才会返回。
  5.void setModal(bool modal)设置对话框的模态性,当参数 model 为 true 时,对话框设为模态,否则设为非模态。如果设为模态,则默认是对整个应用程序模态的。要设为对窗口模态,则需要用函数:void setWindowModality(Qt::WindowModality windowModality); 实际上它是从 QWidget 类继承过来的一个成员函数,其中 Qt::WindowModality 是一个枚举类型,有以下取值: 1)Qt::NonModal:非模态。2)Qt::WindowModal:窗口模态。 3)Qt::ApplicationModal:应用程序模态。
  6.与模态性相关的成员函数还有两个:1)Qt::WindowModality windowModality() const(得到窗口的模态性); 2)bool isModel() const;(判断窗口是否为模态的)
  7.void open();该函数也是一个槽,以对窗口模态的方式显示对话框。与 exec 函数不同的是,open 函数将立刻返回而不是等待对话框关闭。它一般用在需要显示模态对话框但又要继续进行工作的场合,比如一个进度对话框。这时候,需要在工作处理过程中间歇性地调用 QApplication 对象的 processEvents 成员函数,否则对话框的事件将的不到处理。

多窗口切换
  accept()函数是QDialog类中的一个槽,对于一个使用exec()函数实现模态对话框,执行了这个槽就会隐藏这个模态对话框,并返回QDialog::Accept()值。使用这个值来判断哪个按钮被按下了。
  reject()槽与其对应,它可以返回一个QDialog::Rejected值

标准对话框
1.颜色对话框
   颜色对话框类QColorDialog提供了一个可以获取指定颜色的对话框部件,需要包含头文件,可以使用QColorDialog的静态成员getColor()来获取颜色,这个函数会以模态方式运行一个颜色对话框,QcolorDialog::getColor(Qt::red,this,tr("颜色对话框“,QColorDialog::ShowAlphaChannel);四个参数的作用为:设置初始颜色、指定父窗口、设置对话框标题、以及获取颜色透明度的范围

2.文件对话框
  文件对话框QFileDialog提供了一个允许文件或文件夹的对话框,需要包含头文件,可以使用QFileDialog类中的getOpenFileName()函数来获取选择的文件名,这个函数会以模态方式运行一个文件对话框,QFileDialog::getOpenFileName(this,tr("文件对话框”),“D:”,tr("图片格式(*png *jpg)));他的四个参数的作用为:指定父窗口、设置对话框标题、指定默认打开目录路径、设置文件类型过滤器;如果不指定文件过滤器,则默认选择所有类型的文件,还可以设置多个不同类别的过滤器,不同类别间使用两个分号;;间隔开。QFileDialog类还提供了getSaveFileName()函数来实现保存文件对话框和文件另存为对话框;还有getExistingDirection()函数来获取一个已存在的文件夹路径。

3.字体对话框
  字体对话框QFontDialog类提供了一个可以选择字体的对话框部件,需要包含头文件,可以使用QFileDialog类中的getFont()静态函数来获取选择的字体,QFontDialog::getFont(&ok,this),这个函数的第一个参数是Bool类型,用来存放按下的按钮状态,第二个参数指定父窗口

4.输入对话框
  输入对话框QInputDialog类提供了一个对话框,可以让用户输入一个单一的数值或字符串,需要包含头文件,可以使用getText()函数提供一个可输入字符串的对话框,QInputDialog::getText(this,tr(“输入字符串对话框”),tr(”请输入用户名"),QLineEdit::Normal,tr("admin“),&ok);各参数的作用分别是:指定父窗口、设置窗口标题、设置对话框中的标签显示文本、设置输入字符串的显示模式(例如密码可以显示成小黑点,这里选择了显示用户输入的实际内容)、设置输入框中的默认字符串和设置获取按下按钮信息的bool变量。getInt()函数可以提供一个输入整形数值的对话框;QInputDialog::getInt(this,tr("输入整数对话框”),tr(“请输入-1000到1000之间的数值”),100,-1000,1000,10,&ok);其中的参数100表示默认的数值是100,-1000表示可以输入的最小值,1000表示可以输入的最大值,10表示使用箭头按钮,数值每次变化10;getDouble()函数可以提供一个输入浮点型数值的对话框,QInputDialog::getDouble(this,tr("输入浮点数对话框”),tr(“请输入-1000到1000之间的数值”),0.00,-1000,1000,2,&ok);其中的参数2表示小数的位数是2。getItem()函数可以提供一个输入一个条目的对话框,需要先给他提供一些条目,QInputDialog::getItem(this,tr(“输入条目对话框”),tr(“请选择或输入一个条目”),items,0,true,&ok);其中参数0表示默认显示列表1的第0个条目,参数true设置条目是否可以被更改。

5.消息对话框
  消息对话框QMessageBox类提供了一个模态的对话框来通知用户一些信息,或者向用户提出一个问题并且获取答案,需要添加
  问题对话框:QMessageBox::question(this,tr(“问题对话框”),tr(“你了解Qt吗”),QMessageBox::Yes,QMessageBox::No);
  提示对话框:QMessageBox::information(this,tr(“提示对话框”),tr(“这是Qt书籍”),QMessageBox::Ok);
  警告对话框:QMessageBox::warning(this,tr(“警告对话框”),tr(“不能提前结束”),QMessageBox::Abort);
  错误对话框:QMessageBox::critial(this,tr(“严重错误对话框”),tr(“严重错误”),QMessageBox::YesAll);
  关于对话框:QMessageBox::about(this,tr(“关于对话框”),tr(“致力于QT普及工作”));

6.进度对话框
  进度对话框QProgressDialog对一个耗时较长的操作的进度提供了反馈,需要添加,构造函数的参数分别用于设置对话框的标签内容,取消按钮的显示文本、最小值、最大值、和父窗口。然后将对话框设置为模态进行显示。for()循环语句模拟了文件复制过程,setValue()函数使进度条向前推动,为了避免长时间操作而使用户界面冻结,必须不断地调用QCoreApplicationDialog的wasCanceled()函数来判断用户是否按下了“取消”按钮,如果是,则终端,这里是模态对话框,也可以实现非模态,不过需要定时器的帮助。

7.错误信息对话框
   错误信息对话框QErrorMessage类提供了一个显示错误信息的对话框(需要先添加类前置说明,然后添加私有对象,然后在构造函数中添加new QErrorMessage(this),然后在信号槽里填加代码。

8.向导对话框
  向导对话框QWizard类提供了一个设计向导界面的框架。首先在头文件中#include,在声明中添加private类型函数声明,QWizardPage *createPage1();然后对函数进行定义。

3.其他窗口部件
QFrame类族
  QFrame类族是带有边框的部件的基类。它的子类包括最常用的标签部件QLabel,另外还有QLCDNumber、QSplitter、QStackedWidget、QToolBox和QAbstractScrollArea类(是所有带有滚动区域的部件类的抽象基类)。 QFrame类的主要功能就是用来实现不同的边框效果,这主要是边框形状和边框阴影组成来形成的。
QFrame类边框形状的取值
  QFrame::NoFrame QFrame不进行绘制
  QFrame::Box QFrame在他的内容四周绘制一个边框
  QFrame::Panel QFrame绘制一个面板,使得内容表现为凸起或者凹陷
  QFrame::StylePanel 绘制一个矩形面板,他的效果依赖于当前的GUI样式,可以凸起或者凹陷
  QFrame::HLine QFrame绘制一条水平线,没有任何框架(可以作为分离器)
  QFrame::VLine QFrame绘制一条垂直线,没有任何框架(可以作为分离器)
  QFrame::WinPandel QFrame绘制一个类似于Windows2000中的矩形面板,可以凸起或者凹陷
QFrame类边框阴影的取值
  QFrame::Plain 边框和内容没有3D效果,与四周界面在同一水平面上
  QFrame::Raised 边框和内容表现为凸起,具有3D效果
  QFrame::Sunken 边框和内容表现为凹陷,具有3D效果
这里要说明两个名词,lineWidth和midLineWidth,其中lineWidth是边框边界线的宽度;而midLineWidth是在边框中额外插入的一条线的宽度,这条线的作用是为了形成3D效果。(注意,Qt中凡是带有Abstract字样的类都是抽样基类,抽象基类是不能直接使用的,但是可以继承该类实现自己的类)

1.QLabel
  标签QLabel部件用来显示文本或图片(可以在设计器属性栏中对其方式alignment的属性进行更改,比如水平改为AlignHCenter,垂直的改为AlignVCenter);font属性可以对字体进行设置;QLabel属性栏中的wordWrap属性可以实现文本的自动换行。如果文本过长不想省略,而是在后面自动省略,那么可以使用QFontMetrics类,该类用来计算给定字体的字符或字符串的大小,其中包括了多个实用函数;要使用QFontMetrics,则可以通过创建对象的方式,或通过QWidget::fontMetrics()来返回当前当前部件字体的QFontMetrics对象。QFontMetrics类的elidedText()函数用来进行文本省略,第一个参数用来指定要省略的文本;第二个参数是省略模式,就是…省略号出现的位置,包括Qt::ElideLeft出现在文本开头、Qt::ElideMiddle出现在文本中间,以及Qt::ElideRight出现在文本末尾;第三个参数是文本的长度,单位是像素,只要第一个参数指定的文本的长度超过了这个值,就会进行省略QLabel属性栏中的scaledContents属性可以实现缩放标签中的内容(比如标签中放一张图),需要添加 QPixmap ;QLabel还可以显示gif动态图片,需要添加头文件QMovie;

2.QLCDNumber
  QLCDNumber部件可以让数码字符显示类似液晶数字一样的效果。从部件栏拖入一个LCD Number部件到界面上,然后更改其属性:选中smallDecimalPoint项,这样可以显示小数点;digitCount的作用是设置显示的数字的个数,设置为7,表示要显示7个数字;mode选Dec表示显示十进制数值,这里还可以设置为其他进制;segmentStyle用来设置数码的显示样式,这里提供了3中样式;最后value值设置为要显示的数值;也可以在代码中使用display()函数来设置要显示的数值,在QLCDNumber中可以显示的数码由0/O,1,2,3,4,5/S,6,7,8,9/g,符号,小数点,A,B,C,D,E,F,H,h,L,o,P,r,u,U,Y,冒号,度符号和空格。

3.QStackedWidget
  QStackedWidget类提供了一个部件栈,可以由多个界面(称为页面),每个界面可以拥有自己的部件,不过每次只能显示一个界面。这个部件需要使用QComboBox或者QListWidget来选择它的各个页面。在设计模式中向界面上拖入一个List Widget和一个Stacked Widget。在List Widget上右击,在弹出的级联菜单中选择“编辑项目”项,然后在“编辑列表窗口部件”对话框中按下左下角的加号添加两项,并更改名称为“第一项”和“第二项”。然后在Stacked Widget上拖入一个Label,更改文本为“第一页”,再单击Stacked Widget右上角的小箭头进入下一页,再拖入一个标签,更改文本为“第二页"。然后再将Stacked Widget部件的frameShape属性更改为StylePanel。最后在信号和槽设计模式将listWidget部件的CurrentRowChanged()信号和stackedWidget的setCurrentIndex()槽相关联。

4.QToolBox
  QToolBox提供了一列层叠窗口部件,就像常用的聊天工具QQ中的抽屉效果。从部件栏中选择Tool Box拖入界面上,右击并在弹出的级联菜单中选择”插入页->在当前页之后“项来新插入一页,然后更改其frameShape属性为Box,并分别单机各个页的标签,更改其currentItemText分别”好友”“黑名单”、“陌生人”。
按钮部件

  QAbstractButton类是按钮部件的抽象基类,提供了按钮的通用功能。它的子类包括复选框QCheckBox、标准按钮QPushButton、单选框按钮QRadioButton和工具按钮QToolButton。

1.QPushButton
  QPushButton 类代表按钮,它继承了 QAbstractButton 类,因此也有其全部的属性、信号和槽。

QPushButton 类支持以下构造函数:
  QPushButton(QWidget *parent = 0);
  QPushButton(const QString &text, QWidget *parent = 0);
  QPushButton(const QIcon &icon, const QString &text, QWidget *parent = 0);
其中参数text是按钮上显示的文本,icon是按钮的图标,生成的QPushButton对象默认是没有开关状态的。

QPushButton 类的使用
1)获取和设置 按钮上的文本信息:
  QString content = ui->pushButton->text(); // 获取按钮上的文本信息
  qDebug() << content.toUtf8().data(); // QString 类型转 char* 类型,解决打印中文乱码问题
  ui->pushButton->setText(“按钮”); // 设置按钮上的文本信息

2)重新设置按钮的位置和大小:
  ui->pushButton->move(100, 50); // 重新设定按钮的位置
  ui->pushButton->resize(80, 50); // 重新设定按钮的大小
  ui->pushButton->setGeometry(100, 50, 80, 50); // 设置按钮的位置和大小

3)设置按钮根据显示的文本信息自动调整大小:
   ui->pushButton->setText(“很长很长很长很长很长很长很长的文本”);
   ui->pushButton->adjustSize(); // adjustSize():自动调整控件的大小,以适应其内容;

4)设置按钮控件获取焦点:
   ui->pushButton->setFocus();// 设置控件获取焦点
   bool b = ui->pushButton->hasFocus(); // 获取控件是否具有焦点;如果控件有焦点,返回 true;
   qDebug() << b;
   ui->pushButton->clearFocus();// 清除控件的焦点

5)设置鼠标位于按钮控件区域时,光标的类型:
  ui->pushButton->setCursor(QCursor(Qt::BusyCursor));

6)设置控件的禁用和启用:
  ui->pushButton->setDisabled(true);// 禁用控件
  ui->pushButton->setEnabled(true);// 启用控件

7)设置控件的隐藏和显示:
  ui->pushButton->setVisible(false);// 隐藏控件
  ui->pushButton->setVisible(true);// 显示控件

8)设置控件背景透明:即将控件外观设为平铺
  ui->pushButton->setFlat(true);

9)设置控件上显示文本信息的字体:
  ui->pushButton->setFont(QFont(“宋体”, 15));

10)设置在控件上按下 回车键 时,响应控件的 click 事件:
  ui->pushButton->setDefault(true);

11)设置按钮上显示的图标:
ui->pushButton->setIcon(QIcon(":/Image/Luffy.png"));// 设置按钮上显示的图标
ui->pushButton->setIconSize(QSize(24, 24));// 设置图标的大小
ui->pushButton->setFont(QFont(“宋体”, 20));// 设置字体

12)设置按钮样式:前景色,背景色,边框等;需要通过样式表来修改
  //效果:当按下按钮时,字体放大;释放按钮时,字体恢复;
  QStringList list; // 定义初始样式集合
  list.append(“color:white”); // 前景色
  list.append(“background-color:rgb(85,170,255)”); // 背景色
  list.append(“border-style:outset”); // 边框风格
  list.append(“border-width:5px”); // 边框宽度
  list.append(“border-color:rgb(10,45,110)”); // 边框颜色
  list.append(“border-radius:20px”); // 边框倒角
  list.append(“font:bold 30px”); // 字体
  list.append(“padding:4px”); // 内边距
  ui->pushButton->setStyleSheet(list.join(’;’)); // 设置按钮初始样式
  list.replace(6, “font:bold 35px”);// 按钮按下时修改样式
  connect(ui->pushButton, &QPushButton::pressed, ={
  ui->pushButton->setStyleSheet(list.join(’;’));
   });
  list.replace(6, “font:bold 30px”); // 按钮弹起时恢复样式
   connect(ui->pushButton, &QPushButton::released, ={
  ui->pushButton->setStyleSheet(list.join(’;’));
   });

13)在按钮上设置背景图片: 将上面 background-color 改成 background-image
  QStringList list; // 定义初始样式集合
  list.append(“color:white”); // 前景色
  list.append(“background-image:url(:/Image/button.png)”); // 背景图片
  list.append(“border-style:outset”); // 边框风格
  list.append(“border-width:5px”); // 边框宽度
  list.append(“border-color:rgb(10,45,110)”); // 边框颜色
  list.append(“border-radius:20px”); // 边框倒角
  list.append(“font:bold 30px”); // 字体
  list.append(“padding:4px”); // 内边距
  ui->pushButton->setStyleSheet(list.join(’;’)); // 设置按钮初始样式
  list.replace(6, “font:bold 35px”);// 按钮按下时修改样式
  connect(ui->pushButton, &QPushButton::pressed, ={
  ui->pushButton->setStyleSheet(list.join(’;’));
   });
  list.replace(6, “font:bold 30px”); // 按钮弹起时恢复样式
   connect(ui->pushButton, &QPushButton::released, ={
  ui->pushButton->setStyleSheet(list.join(’;’));
   });

2.QCheckBox、QRadioButton和QGroupBox
  复选框QCheckBox类提供了同时选择多项的功能,而QRddioButton提供了只能选择一项的功能,一般要把一组按钮放到一个QGroupBox中来管理。
  在设计模式时可往界面上拖入两个GroupBox,将他们的标题分别改为“复选框”和“单选框”。然后往复选框中拖入3个CheckBox,分别更改显示内容“跑步”、“踢球”、“游泳”。再往单选框中拖入3个Radio Button,分别更改显示内容为“很好”、“一般”、“不好”。这里还可以选中Check Box的tristate属性,让它拥有不改变状态、选中状态和未选中状态3中状态。对于选择按钮后的操作,可以关联它们的state-Changed()信号和自定义的槽,也可以使用isChecked()函数查看一个按钮是否被选中。除了Group Box,也可以使用QButtonGroup类来管理多个按钮。

QLineEdit
  行编辑器QLineEdit部件是一个单行的文本编辑器,它允许用户输入和编辑单行的纯文本,而且提供了一系列有用的功能,包括撤销与恢复剪切和拖放等操作。其中,剪切复制等功能是行编辑器自带的,不用自己编码实现。

QLineEdit的四种显示模式:
  行编辑器QLineEdit有四种显示模式(echoMode),可以在echoMode属性中更改它们,分别是Normal正常显示输入的信息;NoEcho不显示任何输入,这样可以保证不泄露输入的字符位数;Password显示为密码样式,就是以小黑点或星号之类的字符代替输入的字符;PasswordEchoOnEdit在编辑时显示正常字符,其他情况下显示为密码样式。

QLineEdit的输入掩码
  QLineEdit提供了输入掩码来限制输入的内容,可以使用一些特殊的字符来设置输入的格式和内容,这些字符的含义如下:

字符(必须输入)字符(可留空)含义
Aa只能输入A ~ Z, a ~ z
Nn只能输入A~Z, a ~ z,0 ~ 9
Xx可以输入任何字符
90只能输入0 ~ 9
Dd只能输入1 ~ 9
#只能输入加号,减号,0 ~ 9
Hh只能输入十六进制字符,A ~ F,a ~ f,0 ~ 9
Bb只能输入二进制字符,0或1
>后面的字母字符自动转换为大写
<后面的字母字符自动转换为小写
停止字母字符的大小写转换
\将该表中的特殊字符正常显示用作分隔符

QLineEdit的输入验证
  QValidator * validator = new QIntValidator(100,999,this); //新建验证器,指定范围为100~999
  ui->lineEdit->setValidator(validator); //在行编辑器中使用验证器

QLineEdit的自动补全
  QLineEdit中也提供了强大的自动补全功能,这是利用QCompleter类实现的。具体实现如下:
  QStringList wordList;
  wordList<<“Qt”<<“Qt Creator”<<tr(“你好”);
  QCompleter * completer = new QCompleter(wordList,this); //新建自动完成器
  completer->setCaseSensitivity(Qt::CaseInsensitive); //设置大小写不敏感
  ui->lineEdit->setCompleter(completer);

QLineEdit类支持的构造函数:
 &emspQLineEdit (QWidget *parent = 0);
 &emspQLineEdit(const QString &contents, QWidget *parent = 0);
 &emsp其中contents表示编辑框中显示的内容

QLineEdit类的属性
  QLineEdit类的属性主要包括alignment 属性、maxLength 属性、readOnly 属性、text 属性、frame 属性。

alignment属性:显示文本的对其方式,相关的成员函数如下:
  int maxLength() const; // 获取最大输入长度
  void setMaxLength(Qt::Alignment flag) const; // 设置对齐方式

maxLength属性:表示编辑框可以容许的最大输入长度,相关的成员函数如下:
  int maxLength() const; // 获取最大输入长度
  void setMaxLength(int len); // 设置最大输入长度

readOnly 属性:表示编辑框的内容是否为只读的,即内容是否可以被用户修改,相关成员函数如下:
  bool isReadOnly() const; // 判断是否为只读的
  void setReadOnly(bool on); // 判断是否为只读的

text 属性:表示编辑框的内容,相关的成员函数如下:
  QString text() const; // 获取编辑框的内容
  void setText(const QString &text); // 设置编辑框的内容,这是一个槽
   其中 setText 函数同时也是一个槽。要注意编辑框的内容不一定就是编辑框显示的内容,比如一个密码输入编辑框,用户输入的密码是不显示出来的。如果要得到编辑框的内容,则需使用下面的成员函数:
  QString displayText() const; // 得到显示的内容

frame 属性:控制编辑框有没有边框,相关成员函数如下:
  bool hasFrame() const; // 判断有没有边框
  void setFrame(bool on); // 设置有没有边框

下面两个成员函数虽然不是属性,但也与文本的显示有关:
  void setTextMargins(int left, int top, int right,int bottom); // 设置边距
  void getTextMargins(int *left, int *top, int *right, int *botton); // 获取边距

QLineEdit类的信号
  void textChanged(const QString &text);//当编辑框的内容发生变化时,将发射信号,其中参数 text 是发生变化后的内容。
  void textEdited(const QString &text);//当编辑框的内容被编辑时,将发射信号, 其中参数 text 是编辑后的内容。它与 textChanged 信号的主要区别在于,它只是在用户进行修改的时候发射,在程序中用 setText 修改时则不发射,而后者则在两种情况下都会发射。
  void returnPressed();//当在编辑框中按下回车键时,将发射信号,这个信号将在按下回车键或者编辑框失去焦点时发射。

QLineEdit类的槽
  void clear();//调用下面的槽可以清空编辑框中的内容:

QAbstractSpinBox
  QAbstractSpinBox类是一个抽象基类,提供了一个数值设定框和一个行编辑器来显示设定值。它有3个子类QDateTimeEdit、QSpinBox和QDdoubleSpinBox,分别用来完成日期时间、整数和浮点数的设定。

QDateTimeEdit
QDateTimeEdit类提供了一个可以编辑日期和时间的部件。到设计模式,从部件栏中分别拖Time Edit、Date Edit 和Date/Time Edit到界面上,然后设置timeEdit的displayFormat为“h:mm:ssA”,这就可以使用12h制来进行显示。对于dateEdit,选中它的calendarPopup属性,就可以使用弹出的日历部件来设置日期,然后在类的构造函数中添加代码来设置日期和时间。
  ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime()); //设置时间为现在的系统时间
  ui->dateTimeEdit->setDisplayFormat(tr(“xxxx年xx月xx日xx时xx分xx秒”)); //设置时间的显示格式

QSpinBox和QDoubleSpinBox
  QSpinBox用来设置整数,QDoubleSpinBox用来设置浮点数,从部件栏中找到Spin Box和Double Spin Box,并将它们拖入到界面上。可以在属性栏中看到spinBox的属性有:后缀suffix属性,可以设置为“%”,这样就可以显示百分数了;前缀prefix属性,比如表示金钱时前面有“¥”字符;最小值minimum属性,设置其最小值;最大值maximum属性设置其最大值;单步值singleStep属性设置每次增加的数值,默认为1;value为现在显示的数值。而doubleSpinBox又增加了一个小数位数decimals属性,用来设置小数点后面的位数。

QAbstractSlider
  QAbstractSlide类用于提供区间内的一个整数值,它有一个滑块,可以定位到一个整数区间的任意值。该类是一个抽象基类,它有3个子类,QScrollBar、QSlider和QDial。其中滚动条QScrollBar多数是是用在QScrollArea类中来实现滚动区域;QSlider就是常见的音量控制或多媒体播放进度等滑动部件;QDial是一个刻度表盘部件。
  属性:maximum属性用来设置最大值,minimum属性用来设置最小值;singleStep属性是每步的步长,默认是1,就是按下方向键后其数值增加或者减少1;pageStep是每页的步长,默认是10,就是摁下PageUp或者PageDown按键后,其数值增加或者减少10;value与sliderPosition是当前值;tracking设置是否跟踪,默认为是,就是在拖动滑块时,每移动一个刻度,都会发射valueChanged()信号,如果选择否,则只有拖动滑块释放时才发射该信号;orientation设置部件的方向,有水平和垂直两种选择;invertedAppearance属性设置滑块所在的位置,比如默认滑块开始在最左端,选中这个属性后,滑块默认就会在最右端。invertedControls设置反向控制,比如默认向上方向键是增大,向下方向键是减小,如果选中这个属性,那么控制就会正好反过来。另外,为了使部件可以获得焦点,需要将focusPolicy设置为StrongFocus. Slider有了自己的两个属性,tickPosition和tickInterval,前者用来设置刻度的位置,默认是不显示刻度;后者是设置刻度的间隔。而Dial有自己的属性wrapping,用来设置是否首尾相连,默认开始于结束是分开的;属性notchTarget用来设置刻度之间的间隔;属性notches Visible用来设置是否显示刻度。

总结

主要介绍了众多常用窗口部件的使用方法,当然也有一些漏的,会在以后慢慢补上。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值