关闭

Qt部件----按钮,标签,表的使用

1635人阅读 评论(0) 收藏 举报

1、使用按钮

Qt的按钮有三种类型:

·按钮(QPushButton)

·单选按钮(QRadioButton)

·复选按钮(QCheckButton)

第一种用于产生某种事件,单选和复选按钮用于做一些选择。


1.1 按钮QPushButton

  • 创建按钮
QPushButton *button=new QPushButton(“name”,this);//第一个参数:按钮标签,第二个参数:按钮的父对象。

  • 设置按钮
button->setGeoMetry(10,10,180,80);//设置按钮的位置和大小,前两个表示按钮距离父窗口左上角的坐标像素的位置,后两个表示按钮的大小。
button->setFont(QFont("times",16,QFont::Bold));//设置按钮标签的字体,字号和样式。
QPixmap pixmap(“somepixmap.xpm”);
button->setPixmap(pixmap);//这两句在一起可以为按钮添加一个位图标签,somepixmap.xpm是你选择的位图。
button->setDefault();//该函数将按钮button设置为默认按钮,即用户按回车键事即点击按钮。

  • 信号与事件关联

需要将按钮连接与某个时间时,只需将信号QPushButton::clicked()连接到一个槽即可。


1.2、单选按钮QRadioButton


当用户需要从几个选项中选择一项时就要用到单选按钮。

  • 创建一组单选按钮:QButtonGroup和QRadioButton
QbuttonGroup *group=new QButtonGroup(“options”,this);//第一个参数为按钮标题,第二个参数为父组件
group->setGeometry(10,10,130,120);//设置几个位置和大小
QRadioButton *b1=new QRadioButton("chice 1",group);//参数一为单选按钮的标签,第二个参数为父组件,单选按钮组
b1->move(20,20);设置该单选按钮在单选按钮组中的位置。
QRadioButton *b2=new QRadioButton("chice 2",group);
b2->move(20,50);
QRadioButton *b3=new QRadioButton("chice 3"group);
b3->move(20,80);
group->insert(b1);
group->insert(b2);
group->insert(b3);//将单选按钮插入到按钮组中。

  • 单选按钮信号

当选取一个按钮是,就会发射QRadioButton::isChecked()信号。一般单选按钮关联的槽不会引起程序视觉上的变化。只是调用一个函数,来设置程序的某些参数。


1.3 复选按钮QCheckBox

  • 创建一组复选框按钮
使用QButtonGroup和QCheckBox类可以创建一组复选框按钮。程序片段如下

QbuttonGroup *group=new QButtonGroup(“options”,this);//第一个参数为按钮标题,第二个参数为父组件
group->setGeometry(10,10,130,120);//设置几个位置和大小
QCheckBox *b1=new QCheckBox("chice 1",group);//参数一为单选按钮的标签,第二个参数为父组件,单选按钮组
b1->move(20,20);设置该单选按钮在单选按钮组中的位置。
QCheckBox *b2=new QCheckBox("chice 2",group);
b2->move(20,50);
QCheckBox *b3=new QCheckBox("chice 3"group);
b3->move(20,80);
group->insert(b1);
group->insert(b2);
group->insert(b3);//将单选按钮插入到按钮组中。

方法和单选框相同。

  • 复选框信号
当某个QCheckBox对象被选中时,就会发出QCheckBox::isChecked()信号。


2、使用标签QLabel,QLCDNumer


2.1 QLabel

标签用于显示简单的文本。使用见如下代码片段

QLabel *label=new QLabel(this);
label->setGeometry(10,10,150,80);
label->setText("Label");
label->setAlignment(AlignHCenter|AlignVCenter);//设置文本对其方式。多个参数用“|”分割。

标签文本对其方式定义如下:

AlignTop:将文本添加到QLabel对象的上部

AlignButton:将文本添加到QLabel对象的下部

AlignLeft:沿着QLabel对象的左边添加文本

AlignRight:沿着QLabel对象的右边添加文本

AlignHCenter:将文本添加到QLabel对象水平中心的位置

AlignVCenter:将文本添加到QLabel对象的垂直中心位置

AlignCenter:与AlignVCenter和AlignHCenter的设置结果相同

WordBreak:自动断字

Expandtabs:扩展制表符


也可以使用QLabel显示位图和动画。这一功能由QLabel::setPixmap()和QLabel::setMovie()函数来实现。

2.1 QLCDNumber

如果程序中需要显示数字信息,选择使用QLCDNumber类是非常恰当的。与QLabel一样,QLCDNumber类常用来向用户显示日期一类的短信息(指的是数字信息)。

QLCDNumber *number=new QLCDNumber();
number->setGeometry(10,10,150,80);
number->display(1234);可以显示整形,浮点型,和QString类。
QLCDNumber的成员函数如下:

setNumDigits():设置所显示的位数;

setBinMode():要求以二进制方式显示;

setOctMode():要求以八进制方式显示;

setHexMode():要求以十六进制方式显示;

setDecMode():要求以十进制方式显示(默认);

setSmallDecimalPoint():其参数为TRUE或者FALSE,它决定小数点是单独占一位空间还是在两个位之间。换句话说,如果函数参数为TRUE,小数点将占用比平常更少的空间。

setSegmentStyle():改变所显示数字的外观,参数可以为Outline,Filled或者Flat

checkOverFlow():调用这个函数检查给定值是否在显示区域内显示。(QLCDNumber 也发射overflow()信号,你可以将它连接到一个处理来处理这种情况。)

3、表

Qt提供的QTableView类用于创建表。他是一个很有用的类。但是其定义非常抽象,因此,为了很好的使用它,我们需要从QTableView类派生一个新类。

3.1 创建简单的表格

当基于QTableView创建类是,需要重写paintCell()函数,该函数在QTableView中没有定义,但是该类使用它(不需要显示的调用,自己内部调用)来绘制表元。操作如下:

class MyMainWidow:public QTableView
{
public:
myMainWindow();
private:
void paintCell(QPaint *,int ,int);
}

MyMainWindow::MyMainWindow
{
setGeometry(100,100,300,300);
setNumCols(6);//设置列数
setNumRows(10);//设置行数
setCellWith(50);//设置单元格的宽50像素
setCellHeight(30);//设置单元格的高度
}

void MyMainWidow::paintCell(QPainter *p,int row,int col)
{
int x=cellWidth(col);
int y=cellHeight(row);//分别确定单元格的宽和高
p->drawLine(x,0,x,y);
p->drawLine(0,y,x,y);//QTableView每次都设置QPainter的绘图区域,(0,0)是每个单元格的角
}

void main(int argc,char **argv)
{
QApplication a(argc,argv);
MyMainWIndow w;
a.setMainWidget(&w);
w.show();
a.exec();
}

3,2 、向表格中添加文本和点击选择功能。

class MyMainWidow:public QTableView
{
public:
myMainWindow();
private:
void paintCell(QPaint *,int ,int);
void mousePressEvent(QMouseEvent *);
int curRow,curCol;
}

MyMainWindow::MyMainWindow
{
setGeometry(100,100,300,300);
setNumCols(6);//设置列数
setNumRows(10);//设置行数
setCellWith(50);//设置单元格的宽50像素
setCellHeight(30);//设置单元格的高度
setTableFlags(Tbl_vScrollBar|Tal_hScrollBar);//为表格添加滚动条。
setBackgroudMode(Palettebase);改变单元格颜色。
curRow=cueCol=0;


}

void MyMainWidow::paintCell(QPainter *p,int row,int col)
{
int x=cellWidth(col)-1;
int y=cellHeight(row)-1;//分别确定单元格的宽和高
p->drawLine(x,0,x,y);
p->drawLine(0,y,x,y);//QTableView每次都设置QPainter的绘图区域,(0,0)是每个单元格的角

p->drawText(0,0,x+1,y+1,AlignCenter,"some text");//为单元格添加文本
if((row==curRow)&&(col==curCol))//判断即将绘制的单元格是否为当前选中的单元格。
{
if(hasFocus())//程序如果获得焦点,当前选中该程序。
{
p->drawRect(0,0,x,y);//在该单元格的周围载画一个矩形。如何程序没有获得焦点,则矩形为虚线
}
else
{
p->setPen(DotLine);
p->drawRect(0,0,x,y);
p->setPen(SolidLine);
}
}
}
void MyMainWindow::mousePressEvent(QMouseEvent *e)
{
int oldRow=curRow;
int oldCol=curCol;

QPoint clickedPos=e->pos();

curRow=findRow(clickedPos.y());
curCol=findCol(clickedPos.x());

if((curRow!=oldRow)||(curCol!=oldCol))
{
updateCell(oldRow,oldCol);
updateCell(curRow,curCol);
}
}

void main(int argc,char **argv)
{
QApplication a(argc,argv);
MyMainWIndow w;
a.setMainWidget(&w);
w.show();
a.exec();
}


3.3 增加表头

增加表头是由QHeader类实现的。

QHeader *header=newQHeader(this);//创建表头
header->setGeometry(0,70,500,150);//设置表头位置和大小
header->setOrientation(Horizontal);//设置表头的方向为水平,这样添加的表头为列表头,垂直为行表头。
header->addLabel("Name",100);//添加表头











0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16734次
    • 积分:279
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:18篇
    • 译文:0篇
    • 评论:2条
    文章分类