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

原创 2015年07月06日 21:45:10

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);//添加表头











Qt标签编辑框等重叠问题

换了新工作,感觉好开心,找到了自己想找的工作,做Qt的开发。上一份工作也有涉及到Qt的东西,不过是极少极少的,自己对Qt也蛮感兴趣的,但是真正动手做的还不够,现在开始学Qt,另外开始写博文,希望能见证...
  • u013782830
  • u013782830
  • 2016年04月02日 14:36
  • 1289

给QTableView中的一列添加按钮

我的需求是在QTableView里有一列全变为按钮,并且点击按钮可以返回该按钮所在行的其他数据或行号。 这里没有用QItemDelegate,感觉有点难而且理解起来不是那么透彻。在查询了一系列资...
  • hhyvs111
  • hhyvs111
  • 2018年01月19日 20:38
  • 43

QT中如何给表格添加按钮

目前我只会两种,貌似可以用delegate,但是还不晓得怎么用 方法1:如何只是为了用图标示意,然后点击该图标之后能够实现特定功能,那么可以使用QICon与itemClicked()。 /**...
  • smalltreehere
  • smalltreehere
  • 2013年03月30日 16:24
  • 3656

QTableView 一个单元格中添加按钮

首先谢谢  http://www.cnblogs.com/li-peng/p/3961843.html http://www.cnblogs.com/li-peng/p/4029885.html ht...
  • ljt350740378
  • ljt350740378
  • 2016年02月23日 10:59
  • 6766

QTableView基本用法讲解,Qt表格控件的使用方法

QTableView是Qt中用来把数据集以表格形式提供给用户的一个控件,它与C++Builder中的DBGrid作用类似。坦白的说,DBGrid的使用要比QTableView更容易一些。但QTable...
  • imxiangzi
  • imxiangzi
  • 2015年10月17日 16:08
  • 9901

重写QTabWidget,在标签后面添加图标按钮

原本的QTabWidget没有支持在标签后面添加自定义的按钮的方法。想在后面添加自定义的功能按钮需要重写QTabWidget类,自己实现按钮图标的重绘和鼠标点击判断等操作。 1、使用到的主要事件函数...
  • edward342265143
  • edward342265143
  • 2014年11月26日 12:02
  • 3505

Qt中通过控件在Label标签中显示一张静态图片

最近在用qt+opencv搞视觉开发,故开此博客,一方面是记下自己的学习之路,督促自己学习,另一方面也希望有更多的高手指点.   首先说明一下版本,QT的库我使用的是4.8.5,其实4系列差别不大,o...
  • u014020344
  • u014020344
  • 2015年11月27日 11:59
  • 9525

Qt浅谈之总结(整理)

QT的一些知识点总结,方便以后查阅。
  • taiyang1987912
  • taiyang1987912
  • 2014年06月20日 16:18
  • 11540

MFC edit控件实现自动换行

必须设置Vertical Scrollbar = TRUE 必须设置MultiLine = TRUE 必须设置Horizontal Scrollbar = FALSE 必须设置Auto HScr...
  • a200638012
  • a200638012
  • 2016年07月08日 17:22
  • 4803

设置MFC Edit control可以换行显示

MFC Edit control可以换行显示 1.设置edit control 属性Multiline为true 2.写入数据时,想换行的时候写入"\r\n"即可,CString str.Re...
  • a780902723
  • a780902723
  • 2014年12月09日 16:52
  • 2475
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt部件----按钮,标签,表的使用
举报原因:
原因补充:

(最多只允许输入30个字)