甲:嵌入式产品设计考虑
1. 输出设备,显示屏,打印机,IO端口等.
IO 端口可以通过操作文件描述符来控制. 用一个bit的信息可以控制IO的高低电平,也可以读入
打印机(串口打印机)可以通过操纵串行口来实现. 输出信息方式是文字.
显示屏是最主要的信息输出方式, 其向用户的展示信息的方式可以通过ascii,
文字,或者图形. QT有很多控件,方便了与用户进行信息沟通.
2. 输入设备, 触摸屏,键盘
嵌入式设备往往没有键盘,可以在屏幕上画出一个键盘,叫软键盘与用户进行交互。触摸屏用来点击
屏幕上的点或者控件
3. 输入输出设备: U盘, TF卡等
乙:linux 对嵌入式产品的支持
linux 对所有的外部设备按照文件来处理,数据的输出与输入用read,write 来进行,简化了与外部设备的接口。
IO端口操作,打印机操作,U盘,TF卡等数据的输入与输出均得到了支持。
关于触摸屏和显示屏,是更加灵活的两个设备, 信息处理方式有所不同,但得到了QT的支持, QT有许多控件来
支持屏幕的显示和触摸屏点击
丙: QT 对图形化界面编程的支持。
QT 提供了许多标准化控件,如果你需要该类图形和功能,一种是直接调用它的接口函数,还有一种是先new 一个
对象,调用对象的方法来操纵对象.
下面分析几个常用的函数和对象。
1. 消息框.(客户化消息框)
当你想通知用户某些信息时,你可能需要一个消息框, 是的,这只需要调用一个函数就可以了.QMessageBox::information()等
如果你对它的外观不满意,可以客户话这个消息框, 例如创建一个无框架,1个或2个button 的消息框
如下是我实现的一个静态方法,并不需要this 指针
int MyMessageBox::information(QWidget *notuse, QString title, QString content,QString s1, QString s2)
{
(void) notuse; //不需要父类指针
(void) title; //不需要标题
QMessageBox customMsgBox; //声明一个对话框对象
customMsgBox.setWindowFlags(Qt::FramelessWindowHint); //设置为无windows 框架
QPushButton *but1 = customMsgBox.addButton(s1,QMessageBox::ActionRole);
QPushButton *but2 = NULL;
if(s2!="") //根据函数参数,创建一个或2个button,button的文字由参数s1,s2确定
{
but2 = customMsgBox.addButton(s2,QMessageBox::ActionRole);
}
customMsgBox.setIcon(QMessageBox::Information); //设置消息框图标
customMsgBox.setText(content); //设置显示内容
customMsgBox.exec(); //呈现给用户,等待点击返回.
if(customMsgBox.clickedButton() == but1) //根据点击按钮,返回不同的值
return 0;
if(customMsgBox.clickedButton() == but2)
return 1;
return -1;
}
通过上边简短的呈现,我们知道QT编程的几个特点: 对象有很多方法,可以供我们调用.
鼠标点击已经隐含在控件中了,我们并没有直接处理鼠标点击。
图形呈现只使用了对象的exec()方法,非常简洁。
2. 键盘输入(软键盘与用户交互)
用户与产品进行交互,往往需要使用键盘,而嵌入式设备一般不带键盘接口,此时,往往需要一个软键盘来代替键盘功能
软键盘就是在屏幕上画出一些键盘按钮,供用户点击,从而获取用户到底点击了那些按钮.高级的软键盘甚至可以结合输入法
输入中文字符.
我们在屏幕上画上几个按钮和一个输入框,用以显示用户输入了什么,一个确定按钮一个取消按钮。我们必须要知道哪个按钮
被点击了,点击这个按钮需要怎样的处理. 按钮被点击时都会发送clicked() 信号, 把这个信号与我们的槽函数相连接,当用户
点击按钮时,就会触发执行我们的槽函数. 众多的按钮,怎样把它们分组管理或处理,达到简化编程的目的就需要一点编程的技巧
把按键点击序列作为索引去搜索数据库,就可以显示出对应的汉字,把汉字显示到按钮上让用户选择,就是中文软键盘了。
如此是用按钮的方式实现中文软件盘和用户交互. 其它还有简化的数字键盘,只是为了输入数字等,仅用到数字健和输入框.
实例代码比较多,就不上了。
3. 数据的呈现
消息框仅能呈现简单的消息,大量的数据需要用一种更有效的方式. 表格是一种不错的形式,它把屏幕划分了若干行若干列,在
每一个格子里显示不同的数据. excel表格很有名, 可以显示丰富的内容。 QT当然对此也有很好的支持
是否用表格呈现数据是一个设计问题,
对于大屏幕而言,表格是一种很好的表现形式,可以有一目了然之感,但对于小屏幕,则不一定合适。说不定文本框更好。
是的, 表格往往只能显示一部分数据, 而整个的数据集在一个小小的屏幕上往往是不能显示的,必须要分很多屏,
甚至需要查找功能才能找到需要的项。
对,项就是表格中的一行,关系型数据库中也用这个概念. 所有的项构成了表格的行数。表格的列是需要自己定义的。
表格是一种两维数组,qt 对此的支持有QTableWidget, 也有QTableView.
QTableView 沿用了MVC 架构,简化为MV结构,将model与view分开,model 负责数据,view 负责显示,model和view 之间的接口是
标准化的,qt 已经为我们写好了,如果达不到要求,我们可以继续继承开发自己的model 或者自己的view 来达到要求
数据的呈现有很多方式,以上仅是一种方法而已。