《Qt5 开发与实例(第三版)》学习笔记(五)

  1 //2.5 控件
  2 //2.51 按钮组(Buttons)
  3 /*
  4 Radio Button //单选按钮
  5 Check Box//复选框
  6 Dialog Button Box//对话框按钮盒
  7 */
  8 //main.cpp
  9 #include "mywidget.h"
 10 #include <QApplication>
 11
 12 int main(int argc, char *argv[])
 13 {
 14     QApplication a(argc, argv);
 15     MyWidget w;//创建一个MyWidget对象
 16     w.setGeometry(100,100,200,120);//设置其长宽
 17     w.show();
 18
 19     return a.exec();
 20 }
 21 //mywidget.h
 22 #include "mywidget.h"
 23 #include <qapplication.h>
 24 #include <qpushbutton.h>//用到了按钮,因此添加相应的头文件
 25 #include <qfont.h>
 26 MyWidget::MyWidget(QWidget *parent)
 27     : QWidget(parent)
 28 {
 29     setMinimumSize(200,120);
 30     setMaximumSize(200,120);
 31     QPushButton *quit = new QPushButton("Quit",this);//先记住
 32     quit->setGeometry(62,40,75,30);
 33     quit->setFont(QFont("Times",18,QFont::Bold));
 34     connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));
 35 }
 36
 37 MyWidget::~MyWidget()
 38 {
 39
 40 }
 41 //2.52 输入部件组(Input Widgets)
 42 /*
 43 combo box 组合框
 44 spin box 数字显示框
 45 dial 拨号
 46 scroll bar 滚动条
 47 slider 滑块
 48 key sequence edit 按键序列编辑框
 49 */
 50 //QDate Time
 51 QLabel * datalabel = new QLabel();
 52 QDateTime * datatime = new QDateTime(QDateTime::currentDateTime());
 53 datalabel->setText(datatime->date().toString());
 54 datalabel->show();
 55 //QTime
 56 QTimer *time_clock = new QTimer(parent);
 57 connect(time_clock,SIGNAL(timeout()),this,SLOT(slottimedone()));//定时时间一到发送timeout()信号,从而触发slottimedone()槽去完成某件事情
 58 start(int time)//每隔time秒触发定时
 59 setSingleShot(true)//仅启动一次
 60 stop()//关掉定时器
 61 time_clock->start(2000)//示例
 62 //2.53 显示控件组(Display Widgets)
 63 LCD Number//液晶数字
 64 Progress Bar//进度条
 65 OpenGL widget//开放式图形库工具
 66 QQuickWidget//嵌入QML工具
 67
 68 Text Browser 介绍
 69 属性见 P48
 70 SLOTS:
 71 virtual void backward()
 72 virtual void forward()
 73 virtual void home()
 74
 75 //widget.h
 76 #ifndef WIDGET_H
 77 #define WIDGET_H
 78
 79 #include <QWidget>
 80 #include <QTreeWidgetItem>
 81 namespace Ui {
 82 class Widget;
 83 }
 84
 85 class Widget : public QWidget
 86 {
 87     Q_OBJECT
 88
 89 public:
 90     explicit Widget(QWidget *parent = 0);
 91     void init();
 92     ~Widget();
 93     void updateParentItem(QTreeWidgetItem* item);
 94 public slots:
 95     void treeItemChanged (QTreeWidgetItem* item,int column);
 96
 97 private:
 98     Ui::Widget *ui;
 99 };
100
101 #endif // WIDGET_H
102
103 //widget.cpp
104 #include "widget.h"
105 #include "ui_widget.h"
106
107 Widget::Widget(QWidget *parent) :
108     QWidget(parent),
109     ui(new Ui::Widget)
110 {
111     init();//?
112     connect(ui->treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(treeItemChanged(QTreeWidgetItem*,int)));//SIGNAL & SLot
113     ui->setupUi(this);
114 }
115
116 Widget::~Widget()
117 {
118     delete ui;
119 }
120 void Widget::init()
121 {
122     ui->treeWidget->clear();
123     //1
124     QTreeWidgetItem *group1 = new QTreeWidgetItem(ui->treeWidget);
125     group1->setText(0,"group1");
126     group1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
127     group1->setCheckState(0,Qt::Unchecked);
128     QTreeWidgetItem *subItem11 = new QTreeWidgetItem(group1);
129     subItem11->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
130     subItem11->setText(0,"subItem11");
131     subItem11->setCheckState(0,Qt::Unchecked);
132     QTreeWidgetItem *subItem12 = new QTreeWidgetItem(group1);
133     subItem12->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
134     subItem12->setText(0,"subItem12");
135     subItem12->setCheckState(0,Qt::Unchecked);
136     QTreeWidgetItem *subItem13 = new QTreeWidgetItem(group1);
137     subItem13->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
138     subItem13->setText(0,"subItem13");
139     subItem13->setCheckState(0,Qt::Unchecked);
140     //2
141     QTreeWidgetItem *group2 = new QTreeWidgetItem(ui->treeWidget);
142     group2->setText(0,"group2");
143     group2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
144     group2->setCheckState(0,Qt::Unchecked);
145     QTreeWidgetItem *subItem21 = new QTreeWidgetItem(group2);
146     subItem21->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
147     subItem21->setText(0,"subItem21");
148     subItem21->setCheckState(0,Qt::Unchecked);
149     QTreeWidgetItem *subItem22 = new QTreeWidgetItem(group2);
150     subItem22->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
151     subItem22->setText(0,"subItem22");
152     subItem22->setCheckState(0,Qt::Unchecked);
153     QTreeWidgetItem *subItem23 = new QTreeWidgetItem(group2);
154     subItem23->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
155     subItem23->setText(0,"subItem23");
156     subItem23->setCheckState(0,Qt::Unchecked);
157 }
158
159 void Widget::treeItemChanged(QTreeWidgetItem *item, int column)
160 {
161     QString itemText = item->text(0);
162     if (Qt::Checked==item->checkState(0))
163     {
164         QTreeWidgetItem* parent = item->parent();
165         int count=item->childCount();
166         if(count>0)
167         {
168             for(int i=0;i<count;i++)
169             {
170                 item->child(i)->setCheckState(0,Qt::Checked);
171             }
172         }
173         else
174         {
175             updateParentItem(item);
176         }
177     }
178     else if(Qt::Unchecked == item->checkState(0))
179     {
180         int count = item->childCount();
181         if(count>0)
182         {
183             for(int i=0;i<count;i++)
184             {
185                 item->child(i)->setCheckState(0,Qt::Unchecked);
186             }
187         }
188         else
189         {
190             updateParentItem(item);
191         }
192     }
193 }
194 void Widget::updateParentItem(QTreeWidgetItem *item)
195 {
196     QTreeWidgetItem *parent = item->parent();
197     if(parent == NULL)
198     {
199         return;
200     }
201     int selectedCount = 0;
202     int childCount = parent->childCount();
203     for(int i =0;i<childCount;++i)
204     {
205         QTreeWidgetItem* childItem = parent->child(i);
206         if(childItem->checkState(0)==Qt::Checked)
207         {
208             selectedCount++;
209         }
210     }
211     if(selectedCount<=0)
212     {
213         parent->setCheckState(0,Qt::Unchecked);
214     }
215     else if(selectedCount>0&&selectedCount<childCount)
216     {
217         parent->setCheckState(0,Qt::PartiallyChecked);
218     }
219     else if(selectedCount == childCount)
220     {
221         parent->setCheckState(0,Qt::Checked);
222     }
223 }
224
225
226 //main.cpp
227 #include "widget.h"
228 #include <QApplication>
229
230 int main(int argc, char *argv[])
231 {
232     QApplication a(argc, argv);
233     Widget w;
234     w.show();
235
236     return a.exec();
237 }
238
239
240 //dialog.h
241 private slots:
242     void on_lineEdit_textChanged();//定义一个槽;名字的定义有一定规则
243 //dialog.cpp
244 Dialog::Dialog(QWidget *parent) :
245     QDialog(parent),
246     ui(new Ui::Dialog)
247 {
248     ui->setupUi(this);
249     QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");//建立一个正则表达式
250     ui->lineEdit->setValidator(new QRegExpValidator(regExp,this));//先记住如何使用
251     connect(ui->okButton,SIGNAL(clicked(bool)),this,SLOT(accept()));//信号与槽的连接
252     connect(ui->cancelButton,SIGNAL(clicked(bool)),this,SLOT(reject()));
253 }
254 void Dialog::on_lineEdit_textChanged()//定义槽函数
255 {
256     ui->okButton->setEnabled(ui->lineEdit->hasAcceptableInput());//使用lineEdit输入文本的有效性决定okButton的可操作性
257 }

原文地址:https://www.cnblogs.com/justsong/p/8361081.html

时间: 2024-12-24 14:22:37

《Qt5 开发与实例(第三版)》学习笔记(五)的相关文章

python cookbook第三版学习笔记五:datetime

Python中表示时间的模块是datetime,引入下面的模块 from datetime import datetime,timedelta print datetime.today()  #打印出当前的时间 E:\python2.7.11\python.exe E:/py_prj/python_cookbook.py 2017-04-26 21:58:05.663000 我们还可以对时间进行加减操作.这里要用到timedelta模块 这个模块有5个重要参数分别是days,minutes,se

python cookbook第三版学习笔记十二:类和对象(三)创建新的类或实例属性

先介绍几个类中的应用__getattr__,__setattr__,__get__,__set__,__getattribute__,. __getattr__:当在类中找不到attribute的时候,会调用__getattr__,并执行其中的自定义代码.所有在类中定义的属性都包含在__dict__中,也就是说如果在__dict__中找不到对应的属性名,则__getattr__被触发. class get_try(object):     def __init__(self,value):   

python cookbook第三版学习笔记十三:类和对象(三)描述器

__get__以及__set__:假设T是一个类,t是他的实例,d是它的一个描述器属性.读取属性的时候T.d返回的是d.__get__(None,T),t.d返回的是d.__get__(t,T).说法比较绕,我们来看一个实例: class Descriptor(object):     def __get__(self, instance, owner):         return 'get',self,instance,owner class T(object):     d=Descri

python cookbook第三版学习笔记六:迭代器与生成器

假如我们有一个列表 items=[1,2,3].我们要遍历这个列表我们会用下面的方式 For i in items:   Print i 首先介绍几个概念:容器,可迭代对象,迭代器 容器是一种存储数据的数据结构,容器将所有数据保存在内存中,典型的容器有列表,集合,字典,字符数组等.如items就是一个列表容器.   可迭代对象:这个对象是否可迭代.如items也是一个可迭代对象.简单来说如果可以用for循环的对象都称为可迭代对象.如果要判断是否是一个可迭代的对象.可以用print isinsta

python cookbook第三版学习笔记七:python解析csv,json,xml文件

CSV文件读取: Csv文件格式如下:分别有2行三列. 访问代码如下: f=open(r'E:\py_prj\test.csv','rb') f_csv=csv.reader(f) for f in f_csv:     print f 在这里f是一个元组,为了访问某个字段,需要用索引来访问对应的值,如f[0]访问的是first,f[1]访问的是second,f[2]访问的是third. 用列索引的方式很难记住.一不留神就会搞错.可以考虑用对元组命名的方式 这里介绍namedtuple的方法.

python cookbook第三版学习笔记二:字典

一般来说字典中是一个键对应一个单值的映射,如果想一个键值映射多个值,那么就需要将这些值放到另外的容器中,比如列表或者集合. 比如d={'a':[1,2]} Collections中的defaultdict模块会自动创建这样的字典.如下 d=defaultdict(list) d['a'].append(1) d['a'].append(2) d['b'].append(3) defaultdict(<type 'list'>, {'a': [1, 2], 'b': [3]}) 下面再来看下字典

python cookbook第三版学习笔记十一:类和对象(二)调用父类的方法

在子类中调用父类的方法,可以下面的A.spam(self)的方法. class A(object):     def spam(self):         print 'A.spam' class B(A):     def spam(self):         print 'B.spam'         A.spam(self) if __name__=='__main__':     b=B()     b.spam() 但是上面的代码有一个问题,如果B的父类变更了,而且有很多子类的父

python cookbook第三版学习笔记九:函数

接受任意数量参数的函数. 当传入函数的参数个数很多的时候,在函数定义的时候不需要为每一个参数定义一个变量,可以用*rest的方式来包含多余的参数. 如下面的代码,*rest包含了2,3,4这3个参数.且可以迭代访问.在这个例子中,rest其实就是其他位置参数组成的一个元组 def avg(first,*rest):     for i in rest:         print i     average=(first+sum(rest))/(1+len(rest))     print av

python cookbook第三版学习笔记十三:类和对象(五)代理类以及内存回收

代理类: 代理类的作用其实有继承有些类似,如果你想将某个实例的属性访问代理到内部另外一个实例中去,可以用继承也可以用代理.来看下代理的应用: class A:     def spam(self,x):         print 'in Class A x=%d' % x     def foo(self):         print 'in Class A:foo()' class B1:     def __init__(self):         self._a=A()       

《Linux命令、编辑器与shell编程》第三版 学习笔记---003

Shell准备 1.识别Shell类型 echo  $0 echo $BASH echo $SHELL 上边三个命令结果都是: /bin/bash 2.终端常用操作 a.删除单个字符 c+h或退格键 b.删除单个单词 c+w c.删除单个行 c+u d.重复编辑命令行 arrowUp或arrowDown e.中断命令执行c+C 3.切换为root用户 a.su命令后,输入root密码 b.sudo命令,输入用户密码,需执行该命令的用户在sudo组中 4.文档查看 a.使用man 1).用户命令