import QtQuick 21
import QtQuickWindow 21
import QtQuickControls 12
Window {
visible: true
width: 360
height: 360
Rectangle {
width: 200; height: 200
ListModel {
id: fruitModel
property string language: "en"
ListElement {
name: "Apple"
cost: 245
}
ListElement {
name: "Orange"
cost: 325
}
ListElement {
name: "Banana"
cost: 195
}
}
ListModel {
id: fruitModel2
property string language: "en"
ListElement {
name: "A"
cost: 245
}
ListElement {
name: "B"
cost: 325
}
ListElement {
name: "C"
cost: 195
}
ListElement {
name: "D"
cost: 195
}
}
Component {
id: fruitDelegate
Item{
Row {
Label{
objectName: "lblName" + index + "1"
text: " Fruit: " + name
}
Label{
objectName: "lblName" + index + "2"
text: " Fruit: " + name
}
}
}
}
ListView {
id:list
property color fruit_color: "green"
model: fruitModel
delegate: fruitDelegate
anchorsfill: parent
}
Rectangle {
x:200
width: 50; height: 50
color: "red"
MouseArea{
anchorsfill: parent
onClicked: {
listmodel = fruitModel2
consolelog(listchildren[0]children[3]children[0]children[0]objectName)
consolelog(listchildren[0]children[2]children[0]children[1]objectName)
}
}
}
}
}
通过columnCount 和 rowCount 获取到当前tablewidget的行数和列数,通过两个for循环,用
QTableWidgetItem item(int row, int column) const 成员函数遍历所有的单元格,再用获取到的QTableWidgetItem对象的virtual QVariant data(int role) const 成员函数取得单元格内数据,再调用QVariant的toString函数取得单元格内数据的字符串格式,然后你就可以将数据写入文件了。
通过
ui->printAgeingTableView->setIndexWidget(standardItemModel->index(i, 5), interval);
添加控件后,获取内容。
获取内容方式:将控件还原,然后再去拿取,不能当做QStandardItem进行 *** 作,否则无法拿到内容。
((QLabel )ui->printAgeingTableView->indexWidget(model->index(var,1)))->text();
这里原本控件是QLabel,还原后再拿取。
一、文件下载
文件下载地址:
也可以下载我上传到网盘上的:
二、文件内容介绍
1下载到的文件为qextserialport-12win-alpha ,解压并打开后其内容如下。
(点击可以查看清晰大图)
下面分别介绍:
(1)doc文件夹中的文件内容是QextSerialPort类和QextBaseType的简单的说明,我们可以使用记事本程序将它们打开。
(2)examples文件夹中是几个例子程序,可以看一下它的源码,不过想运行它们好像会出很多问题啊。
(3)html文件夹中是QextSerialPort类的使用文档。
(4)然后就是剩下的几个文件了。其中qextserialenumeratorcpp及qextserialenumeratorh文件中定
义的QextSerialEnumerator类是用来获取平台上可用的串口信息的。不过,这个类好像并不怎么好用,而且它不是我们关注的重点,所以下面
就不再介绍它了。
(5)qextserialbasecpp和qextserialbaseh文件定义了一个QextSerialBase
类,win_qextserialportcpp和win_qextserialporth文件定义了一个Win_QextSerialPort
类,posix_qextserialportcpp和posix_qextserialporth文件定义了一个
Posix_QextSerialPort类,qextserialportcpp和qextserialporth文件定义了一个
QextSerialPort类。这个QextSerialPort类就是我们上面所说的那个,它是所有这些类的子类,是最高的抽象,它屏蔽了平台特征,
使得在任何平台上都可以使用它。
2几个类的简单介绍。
下面是这几个类的关系图。
可以看到它们都继承自QIODevice类,所以该类的一些函数我们也可以直接来使用。图中还有一个QextBaseType类,其实它只是一个标
识,没有具体的内容,它用来表示Win_QextSerialPort或Posix_QextSerialPort
中的一个类,因为在QextSerialPort类中使用了条件编译,所以QextSerialPort类既可以继承自
Win_QextSerialPort类,也可以继承自Posix_QextSerialPort类,所以使用了QextBaseType来表示。这一点
我们可以在qextserialporth文件中看到。再说QextSerialPort类,其实它只是为了方便程序的跨平台编译,使用它可以在不同的
平台上,根据不同的条件编译继承不同的类。所以它只是一个抽象,提供了几个构造函数而已,并没有具体的内容。在qextserialporth文件中的
条件编译内容如下:
#ifdef_TTY_POSIX_
#include“posix_qextserialporth”
#define QextBaseTypePosix_QextSerialPort
#else
#include“win_qextserialporth”
#define QextBaseTypeWin_QextSerialPort
#endif
所以,其实我们没有必要使用这个类,直接使用Win_QextSerialPort或Posix_QextSerialPort就可以了。当然如果
你想使用这个类,实现同样的源程序可以直接在Windows和Linux下编译运行,那么一定要注意在Linux下这里需要添加
#define _TTY_POSIX_ 。而我们这里为了使得程序更明了,所以没有使用该类,下面也就不再介绍它了。
QextSerialBase类继承自QIODevice类,它提供了 *** 作串口所必需的一些变量和函数等,而
Win_QextSerialPort和Posix_QextSerialPort均继承自QextSerialBase
类,Win_QextSerialPort类添加了Windows平台下 *** 作串口的一些功能,Posix_QextSerialPort类添加了
Linux平台下 *** 作串口的一些功能。所以说,在Windows下我们使用Win_QextSerialPort类,在Linux下我们使用
Posix_QextSerialPort类。
3在QextSerialBase类中还涉及到了一个枚举变量QueryMode。
它有两个值Polling和EventDriven
。QueryMode指的是读取串口的方式,下面我们称为查询模式,我们将Polling称为查询方式Polling,将EventDriven称为事件驱动方式。
事件驱动方式EventDriven就是使用事件处理串口的读取,一旦有数据到来,就会发出readyRead()信号,我们可以关联该信号来读取串口的数据。在事件驱动的方式下,串口的读写是异步的,调用读写函数会立即返回,它们不会冻结调用线程。
而查询方式Polling则不同,读写函数是同步执行的,信号不能工作在这种模式下,而且有些功能也无法实现。但是这种模式下的开销较小。我们需要自己建立定时器来读取串口的数据。
在Windows下支持以上两种模式,而在Linux下只支持Polling模式。
三、小结。
这里讲了这么多,最后要说的只是,我们在Qt中使用这个类编写串口程序,根据平台的不同只需要分别使用四个文件。
以上就是关于qt 如何从listview中获取选中的数据全部的内容,包括:qt 如何从listview中获取选中的数据、Qt中用tablewidget写了一个表,如何获取它的全部数据并保存到一个文件中、如何获取qt动态生成控件的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)