Qt入门(4)——Qt常见控件
Qt提供了大量的内建控件及通用对话框可满足程序员的绝大部分要求。我们将对这些控件和对话框作一个大概的介绍。
1. QLabel
定义
QLabel* m_labelOrdered = newQLabel("0", this);
对文字的左右对齐设置
m_labelOrdered->setAlignment(Qt::AlignLeft);//左对齐
其它还有,横向对齐:
Qt::AlignAuto – 根据语言内容,大部分是左对齐。右对齐的有:阿拉伯语、希伯来(现代以色列)语
Qt::AlignLeft – 居左
Qt::AlignRight – 居右
Qt::AlignHCenter – 居中
Qt::AlignJustify – 两端对齐。并不是所有时候都有效,有时会被AlignAuto中断
竖向对齐:
Qt::AlignTop – 居顶
Qt::AlignBottom – 居底
Qt::AlignVCenter – 居中
同时只可以使用一个横向或竖向对齐方式。但是还有一个同时设置横竖方向的标记:
Qt::AlignCenter – 横竖都居中
2. QPixmap
定义和赋值
QPixmap pix; pix.load("images/typebutton.PNG"); QPixmappix("images/typebutton.PNG"); QPixmap pix = newQPixmap("images/typebutton.PNG");
3. QString
给QString赋值
QString s = “sss”;
也可以:
s.sprintf(“sss %d”, 2);
int转换成QString:
int i=0; //静态函数的方法 QString s = QString::number(i, 10);//10表示10进制,也可以不写,默认就是10进制
//非静态函数的方法
QString::setNum ( ulong n, int base = 10 )
这两个函数同样使用于其他数字类型,如:uint, long, float, bouble等
(3) float、double转换成QString
同上面的函数相同,若想规定输出格式,则可通过参数设定。
QString QString::number ( double n, char f= 'g', int prec = 6 )
setNum()也一样。f是表示输出的格式,prec是保留的小数位数,被截取的部分四舍五入。
4. QLineEdit
密码框的实现
QLineEdit,将echoMode属性设置成:Password
这样,输入的字符都是圆点显示
5. QDialog
动态定义、弹出对话框
qt对话框类是
QDialog (QWidget * parent = 0, const char * name = 0, bool modal = FALSE, WFlags f = 0 )
modal:指是否模式对话框,也可以用setModal(bool)改变设置;
f:指窗口的样式。
如:
DDishDetailForm *dishDetailForm = newDDishDetailForm( this->parentWidget(),
"dishdetailform",
TRUE,WStyle_Customize | WStyle_NoBorder);
定义了一个DDishDetailForm的弹出窗口,模式对话框,无边框。
弹出对话框,可以用:
dishDetailForm->show();//显示的模式按照对应的为准
也可以用:
dishDetailForm->exec();//则无论定义的modal设置的是什么,都按照模式对话框显示
使用QTDesigner导航生成的Form
虽然导航生成的Form也是继承自QDialog,但是它封装了构造函数和析构函数。但是它分别在两个函数里默认调用了init()和destroy()两个函数。
所以要想做什么初始化的操作就定义一个init()函数,写在里面。
要想在析构函数里做什么就定义一个destroy()函数,写在里面。
6. QComboBox
属性设置
设置下拉的高度,高度是可见的item行数:
comboBox->setSizeLimit(5); //5行
如果不想使用滚动条,而是固定高度,横向扩展显示,则做下面设置即可:
m_comboBox->listBox()->setColumnMode(QListBox::Variable);//默认即是 m_comboBox->listBox()->setVariableWidth(true);//使下拉列表的宽度可变 m_comboBox->listBox()->setRowMode(QListBox::FitToHeight);//行数和下拉的高度一致(不出现滚动条) chartTypeTextLabel->setBuddy(chartTypeComboBox );
7. QDate、 QTime and QDateTime
QT提供了三个日期时间方面的类:QDate、QTime、QDateTime。使用方法都差不多,也非常方便。三个类都包含在头文件<qdatetime.h>中。
以QDateTime为例,说明获取当前时间的使用方法。
方法:
currentDataTime()
因为是静态函数,所以不需要定义对象。返回的是QDateTime对象,若想转换成格式字符串,使用toString()函数即可。例子如下:
QString ss =(QDateTime::currentDateTime()).toString("yyyy-MM-dd hh:mm:ss");
9. QProgressDialog
我们处理耗费时间的操作时经常会用到滚动条。直接上代码:
#include <qapplication.h> int NumRows = 10; QProgressDialog progress(tr("Savingfile..."), tr("Cancel"), NumRows); progress.setModal(true); for (int row = 0; row < NumRows; ++row){ progress.setProgress(row); qApp->processEvents(); if (progress.wasCanceled()) { //dosomething return; } }
说明:
NumRows,进度条的总步数,QProgressDialog会根据这个数自动算出每一步走多少长度。
QApplication::processEvents()用来处理任何repaint事件(如,接受用户点击Cancel按钮)(但是好像不写这句也可以)。
我们不调用show()函数,是因为QProgressDialog自己已经做了。如果这个过程变得极短,则dialog根本不会被显示。
以下是Qt的控件类的完整继承图: