qstringlist元素 怎么访问一个元素

拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3af0-ua98).
重新安装浏览器,或使用别的浏览器拒绝访问 |
| 百度云加速
请打开cookies.
此网站 () 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3af70-ua98).
重新安装浏览器,或使用别的浏览器博客访问: 276836
博文数量: 56
博客积分: 610
博客等级: 上士
技术积分: 731
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
QString, QByteArray, 和
QVariant这三个类和容器有许多相同之处,并且在一些情况下可以被当作特殊的容器。 同样,像容器,这些类使用隐式共享来优化内存和速度。
我们将从QString开始。 字符串被每个GUI程序所使用,不仅是用户界面而且还有数据结构。 C++原生提供两种字符串: 传统的C风格以'\0'结尾的字符数组和std::string类。 与这些不同,QString使用16-bit
Unicode值。 Unicode 包含 ASCII 和 Latin-1 这个子集和它们的普通数值。 而QString是16-bit,所以它可以表示世界上绝大多数语言的字符。 Unicode的更多信息,请看十七章。
当使用QString时,我们不必操心如此隐秘的细节像分配足够的内存或着是数据是'\0'结尾的。 总的来说,QString可以被认为是一个QChar向量。一个QString能嵌入'\0'字符。
length()函数返回整个字符串大小,包括嵌入的'\0'。
QString提供一个二元+操作符来连接两个字符串和一个+=操作符来向一个字符串追加字符串。 因为QString在字符串的结尾处自动预分配内存,所以通过反复追加字符来增加一个字符串是非常快的。
这是一个+和+=结合的例子:
QString str = "User: ";
str += userName + "\n";
还有一个QString::append()函数与+=操作符有这一样的功能:
str = "User: ";
str.append(userName);
str.append("\n");
组合字符串的一个完全不同的方式是使用QString的sprintf()函数:
str.sprintf("%s %.1f%%", "perfect competition", 100.0);
支持同样的格式说明符像C++库的sprintf()函数。 在上面的例子中,str被赋值为 "perfect competition 100.0%"。
从另外一个字符串或数字来构建字符串还有另外一种方式,就是使用arg():
str = QString("%1 %2 (%3s-%4s)")
.arg("permissive").arg("society").arg(1950).arg(1970);
在这个例子中,"%1"被"permissive"替换,"%2被"society"替换,"%3"被"1950"替换,而"%4"被
"1970"替换。 结果是"permissive society (s)"。 arg()重载支持各种各样的数据类型。 某些重载有附加参数来控制域宽,数字基数,或浮点精度。 通常,arg()是比sprintf()更好的解决方案,因为它是类型安全(type-safe)的,完全支持Unicode,并且允许translators对"%n"参数重新排序。
QString能将数字转换为字符串,通过使用静态函数QString::number():
str = QString::number(59.6);
或者使用setNum()函数:
str.setNum(59.6);
逆向变换,就是将一个字符串转换为一个数字,使用的是toInt(),
toLongLong(), toDouble(),等等。 例如:
double d = str.toDouble(&ok);
这些函数接受一个可选的bool类型的指针并设置这个bool变量为TRue或false,这取决于转换成功与否。 如果转换失败,这些函数返回0。
一旦我们有一个字符串,我们经常想要提取它的一些部分。 mid()函数返回一个给定起始位置(第一个参数)和长度(第二个参数)的字串。 例如,下面的代码在控制台上打印"pays":[*]
[*]使用实用的qDebug() && arg语法需要包含头文件&QtDebug&,而qDebug("...", arg)语法在任何至少包含一个Qt头文件的文件中可用。
QString str = "polluter pays principle";
qDebug() && str.mid(9, 4);
如果省略第二个参数,mid()返回从指定的起始位置到这个字符串结尾的子串。 例如,下面的代码在控制台上打印"pays principle":
QString str = "polluter pays principle";
qDebug() && str.mid(9);
还有left()和right()函数,它们也执行类似的工作。 他们俩都接受一个表示字符数量的数字,n,并返回并返回最前面或最后面的n个字符。 例如,下面的代码在控制台上打印"polluter principle":
QString str = "polluter pays principle";
qDebug() && str.left(8) && " " && str.right(9);
如果我们希望找出一个字符串是否包含某个字符,字串,或正则表达式,我们可以使用QString的indexOf()函数中的一个:
QString str = "the middle bit";
int i = str.indexOf("middle");
i将被置为4。indexOf()函数返回-1在失败时,并接受一个可选的起始位置和大小写敏感标志。
如果我们希望检查一个字符串是否是以某物开始或结束,我们可以使用startsWith()和endsWith()函数:
if (url.startsWith("http:") && url.endsWith(".png"))
这个要比下面的简单快速:
if (url.left(5) == "http:" && url.right(4) == ".png")
使用==操作符的字符串比较是大小写敏感的。 如果我们正在比较用户级(user-visible)字符串,localeAwareCompare()经常是正确的选择,并且如果我们希望大小写不敏感,我们可以用toUpper()或toLower()。
if (fileName.toLower() == "readme.txt")
如果我们希望用一个字符串替换另一个字符串的某一部分,可以用replace():
QString str = "a cloudy day";
str.replace(2, 6, "sunny");
结果是"a sunny day"。 可以改用remove()和insert():
str.remove(2, 6);
str.insert(2, "sunny");
首先,我们删除从位置2开始的6个字符,产生一个字符串"a day"(有两个空格),然后我们在位置2处插入"sunny"。
有重载版本的replace(),它们能将所有出现第一个参数的地方用第二个参数替换。 例如,这是如何将所有出现"&"的地方用"&"来替换:
str.replace("&", "&");
一个经常的需求是过滤掉字符串中的空白符(如空格,制表符,和换行符)。 QString有一个函数能从字符串的两端删除空白符:
QString str = "
qDebug() && str.trimmed();
字符串str可被描述为:
trimmed()返回的字符串是:
当处理用户输入时,我们经常希望将一个或多个内部空白符替换为单个空格,另外还要过滤掉两端的空白符。 这就是simplified()函数所做的:
QString str = " BOB \t THE \nDOG \n";
qDebug() && str.simplified();
simplified()返回的字符串是:
一个字符串能被分成为一个装有子串的QStringList,通过使用QString::split():
QString str = "polluter pays principle";
QStringList words = str.split(" ");
在上面的例子,我们把"polluter pays principle"分成三个子串: "polluter", "pays", 和 "principle"。
split()函数有一个可选的第三个参数(译者注:Qt4.4版应该是第二个参数)用来决定保留(缺省)还是丢弃空的子串。
QStringList能被组成单个的字符串,通过使用join()。
join()的参数被插入到每对被组合的字符串之间。 例如,下面展示的是如何创建单个的字符串,它由QStringList中的字符串组成,字符串之间按字母顺序排序并用换行符分开:
words.sort();
str = words.join("\n");
当处理字符串时,我们经常需要判断一个字符串是否是空。 调用isEmpty()或检查length()是否为0就可以达到目的。
在大多数情况下,从const char *字符串到QString的转换是自动的,例如:
str += " (1870)";
这里我们将一个const char *加到一个QString上,没有任何约束。 要将一个const char *显示转换成一个QString,就简单地使用一个QString
cast,或者调用fromAscii()或fromLatin1()。 (See Chapter 17 for an explanation of handling literal strings in other encodings.)
要将一个QString转换为一个const
char *,就使用toAscii()或toLatin1()。 这些函数返回一个QByteArray,它能被转换为一个const char *,通过使用QByteArray::data()或QByteArray::constData()。
printf("User: %s\n", str.toAscii().data());
为了方便,Qt提供qPrintable()宏,它执行和toAscii().constData()顺序相同的操作。
printf("User: %s\n", qPrintable(str));
当我们在一个QByteArray上调用data()或constData(),返回的字符串属于QByteArray对象所有。 这意味着我们不用担心内存泄漏;Qt将会为我们回收内存。
另一方面,我们小心不能使用这个指针太长时间。如果QByteArray没有保存在一个变量中,在语句结束时,它将会被自动删除。
QByteArray有着与QString相似的API。 像left(),
right(), mid(),
toLower(), toUpper(),
TRimmed(), 和 simplified() 在QByteArray中和QString中相应的函数有着同样的语义。
QByteArray对存储纯二进制数据(raw binary data)和8-bit编码文本字符串有用。 一般地,我们推荐使用QString来存储文本而不是用QByteArray,因为QString支持Unicode。
为了方便,QByteArray自动确保the "one past the last"byte总是 '\0',使得传递一个QByteArray给一个带有const char *类型参数的函数时操作变得简单。
QByteArray还支持内嵌的'\0'字符,这允许我们用它来存储任意二进制数据(arbitrary binary data)。
在有些情况下,我们需要用共一个变量存储不同类型的数据。 一种处理是将数据编码成一个QByteArray或一个QString。 例如,一个字符串可以保存一个文本值或一个数字值以字符串形式。 这些处理是灵活的,却抹杀了C++的好处,尤其是类型安全和效率。 Qt提供一个更洁净的方式来处理支持不同类型的变量。
QVariant。
QVariant类支持许多Qt类型的值,包括 QBrush,
QColor, QCursor,
QDateTime, QFont,
QKeySequence, QPalette,
QPen, QPixmap,
QPoint, QRect,
QRegion, QSize, 和QString, 和 基本的C++数值类型,像
double 和 int。
QVariant类还支持容器: QMap&QString,QVariant&,
QStringList, 和QList&QVariant&。
可变类型(Variants )被条目视图类(item view classes),数据库模块,和QSettings所广泛使用,它允许我们读写条目数据,数据库数据,和用户参数等任何兼容于QVariant的类型。 我们已经看过第三章中这样的例子,我们传递了一个QRect,一个QStringList,和一对bool作为可变类型给QSettings::setValue(),并作为可变类型对它们解引用。
创建任意复杂的数据结构是可能的,通过用QVariant套用容器的值类型:
QMap&QString, QVariant& pearM
pearMap["Standard"] = 1.95;
pearMap["Organic"] = 2.25;
QMap&QString, QVariant& fruitM
fruitMap["Orange"] = 2.10;
fruitMap["Pineapple"] = 3.85;
fruitMap["Pear"] = pearM
我们已经创建了一个map,它的键是字符串(产品名),它的值是浮点数(价格)或maps。
顶级map包含三个键: "Orange", "Pear", 和"Pineapple"。 与"Pear"键相关联的值是一个map,它包含两个键("Standard" 和"Organic")。 当在持有可变类型值的容器上迭代时,我们需要用type()来检查可变类型所持有的类型以便我们做出适当的响应。
像这样创建数据结构是很吸引人的,因为我们可以用我们喜欢的方式组织数据。 然而QVariant的方便导致了性能和可读性的损耗。 一般地,只要有可能,用它定义一个适当的C++类来存储我们的数据是值得的。
QVariant被Qt的元对象系统所使用并且因此是QtCore模块的一部分。 不过,当我们连接上QtGui模块,QVariant能存储GUI-related类型,如QColor,
QFont, QIcon,
QImage, 和QPixmap:
QIcon icon("open.png");
QVariant variant =
为了从QVariant将GUI-related类型值解引用,我们可以使用QVariant::value&T&()模板函数像下面这样:
QIcon icon = variant.value&QIcon&();
value&T&()还用于non-GUI数据类型和QVariant之间的转换,但实践中我们一般为non-GUI类型使用to...()转换函数(例如,toString())。
QVariant还可以被用来保存自定义数据类型,假如它们提供一个缺省构造函数和一个拷贝构造函数。 为了这个能工作,我们必须首先使用Q_DECLARE_METATYPE()宏注册类型,放在头文件中类定义的下方:
Q_DECLARE_METATYPE(BusinessCard)
这使我们像这样写代码:
BusinessCard businessC
QVariant variant = QVariant::fromValue(businessCard);
if (variant.canConvert&BusinessCard&()) {
BusinessCard card = variant.value&BusinessCard&();
因为编译器的限制,这些模板函数在MSVC
6中不可用。如果你需要使用这个编译器,用全局函数qVariantFromValue(),
qVariantValue&T&(), 和qVariantCanConvert&T&()来代替。
如果自定义数据类型有&&和&&操作符为了写读一个QDataStream,我们可以用qRegisterMetaTypeStreamOperators&T&()注册它们。
此外,这使得通过QSettings来存储自定义数据类型的参数成为可能。 例如:
qRegisterMetaTypeStreamOperators&BusinessCard&("BusinessCard");
这章的重点是Qt容器,以及QString, QByteArray, 和QVariant。 除了这些类,Qt还提供一些其他的容器。 一个是QPair&T1, T2&,它简单地存储两个值,类似于std::pair&T1,
T2&。 另一个是QBitArray,我们将在第十九章第一节使用它。 最后是QVarLengthArray&T,Prealloc&,QVector&T&的一个底层替代品(low-level alternative)。
因为它在栈上预分配内存并且不是隐式共享,所以它的开销要比QVector&T&小,这使得它适合高效的循环(tight loops)。
Qt的算法,包括一些没有在这里提到的像qCopyBackward()和qEqual(),在Qt的文档里有描述。 Qt容器的更多信息,包括它们的时间复杂度和增长策略,参见。
阅读(53584) | 评论(0) | 转发(6) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。28785人阅读
QStringList类提供了一个字符串列表
从QList &QString&继承而来,它提供快速索引为基础的接入以及快速插入和清除
其成员函数用于操作这个字符串列表如
append(),insert(), replace(), removeAll(), removeAt(), removeFirst(), removeLast(), and removeOne()等
1.&& 增加字符串
&& 可以通过append(),或使用&&,如
&& QStringL
&& fonts && &Arial& && &Helvetica& && &Times& && &Courier&;
&&&&&&&&&& // fonts:[ &Arial& ,&Helvetica&, &Times& , &Courier&]
2.&&& 合并字符串使用join( )
QString str = fonts.join(&,&);
&&&&&&&&& // str == &Arial,Helvetica,Times,Courier&
3.&& 拆分字符串
&&&&&&&& QString str = & Arial,Helvetica, ,Times,Courier &;
&&&&&&& QStringList list1 = str.split(&,&);
&&&&&&& // list1: [ & Arial &, & Helvetica &,& &, & Times &, & Courier & ]
&&&&&& QStringList list2 = str.split(&,&, QString::SkipEmptyParts);
&&&&&& // list2: [ & Arial &, & Helvetica &, & Times &, & Courier & ]
&&&& 也就是说如果有QString::SkipEmptyParts,空项不会出现在结果。默认情况下,空项被保留
&&&&&& IndexOf()函数返回给定字符串的第一个出现的索引。
&&&&&& 而lastIndexOf()函数,返回字符串的最后一次出现的索引。
5.&&& 替换replaceInStrings()
&&&&&&& files && &$QTDIR/src/moc/moc.y&
&&&&&&&&&&&&&&&& && &$QTDIR/src/moc/moc.l&
&&&&&&&&&&&&&&&&& && &$QTDIR/include/qconfig.h&;
&&&&&&&&&&& files.replaceInStrings(&$QTDIR&, &/usr/lib/qt&);
&&&&&&&&&&&&&&&&& // files: [ &/usr/lib/qt/src/moc/moc.y&, ...]
6.&&&& 过滤filter()
可以让你提取一个新的列表只包含这些字符串包含一个特定的字符串(或匹配特定正则表达式):
&&&&&&&&&& QStringL
&&&&&&&&&& list && &Bill Murray& && &John Doe& && &Bill Clinton&;
&& QStringL
&&&&&&&&& result = list.filter(&Bill&);
&&&&&&&&& // result: [&Bill Murray&, &Bill Clinton&]
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 记
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:114338次
积分:1455
积分:1455
排名:千里之外
原创:43篇
转载:16篇
评论:30条
(1)(1)(2)(4)(11)(1)(13)(2)(5)(5)(5)(2)(2)(5)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'5721人阅读
Qt学习(6)
Qt提供QListWidget类列表框控件用来加载并显示多个列表项。QListWidgetItem类就是列表项类。一般列表框控件中的列表项有两种加载方式:
一种是由用户手动添加的列表项,比如音乐播放器中加载音乐文件的文件列表,每一个音乐文件都是一个列表项。
对于这种列表项,用户可以进行增加、删除、单击以及双击等操作。
一种是由程序员事先编写好,写在程序中供用户选择的列表项,比如餐厅的电子菜单,每一道菜对应一个列表项。
对于这种列表项,用户可以进行单机和双击操作(增加和删除操作也是可以进行的,但是一般的点菜系统会屏蔽掉这种功能)。
QListWidget类列表框控件支持两种列表项显示方式,即QListView::IconMode和QListView::ListMode。
总结一下列表框常用的增加、删除、单击、双击操作以及列表项显示方式设置,先给出全部代码,再解释。
图1 & 程序界面
首先是main.cpp源文件
#include &QtGui/QApplication&
#include &mainwindow.h&
#include &QTextCodec&
int main(int argc, char *argv[])
QApplication a(argc, argv);
//Qt文本的国际化显示
QTextCodec::setCodecForTr(QTextCodec::codecForName(&GB18030&));
QTextCodec::setCodecForLocale(QTextCodec::codecForName(&GB18030&));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName(&GB18030&));
MainWindow w;
return a.exec();
其次是mainwindow.h头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include &QMainWindow&
#include &QtDebug&
#include &QMessageBox&
#include &QListWidgetItem&
//列表框空间头文件
#include &QFileDialog&
//文件对话框控件
#include &QStringList&
//字符串容器
#include &QDir&
//目录类头文件
#include &QString&
namespace Ui {
class MainWindow;
class MainWindow : public QMainWindow
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
Ui::MainWindow *ui;
private slots:
void addbtn();
void deletebtn();
void delallbtn();
void addallbtn();
void singleclicked(QListWidgetItem* item);
void doubleclicked(QListWidgetItem* item);
#endif // MAINWINDOW_H
最后是mainwindow.cpp源文件
#include &mainwindow.h&
#include &ui_mainwindow.h&
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui-&setupUi(this);
this-&setWindowTitle(tr(&listWidget学习&));
//设置标题框文本
ui-&listWidget-&setViewMode(QListView::IconMode);
//设置显示模式为图标模式
ui-&listWidget-&setViewMode(QListView::ListMode);
//设置显示模式为列表模式
QObject::connect(ui-&AddButton,SIGNAL(clicked()),this,SLOT(addbtn()));
QObject::connect(ui-&lineEdit,SIGNAL(returnPressed()),this,SLOT(addbtn()));
QObject::connect(ui-&DeleteButton,SIGNAL(clicked()),this,SLOT(deletebtn()));
QObject::connect(ui-&DelAllButton,SIGNAL(clicked()),this,SLOT(delallbtn()));
QObject::connect(ui-&ShowDirButton,SIGNAL(clicked()),this,SLOT(addallbtn()));
QObject::connect(ui-&listWidget,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(singleclicked(QListWidgetItem*)));
QObject::connect(ui-&listWidget,SIGNAL(itemDoubleClicked(QListWidgetItem*)),this,SLOT(doubleclicked(QListWidgetItem*)));
MainWindow::~MainWindow()
delete ui;
/***** 添加单个列表项 *****/
void MainWindow::addbtn()
QString str = ui-&lineEdit-&text();
//获取行编辑框文本
QListWidgetItem *item = new QListWidgetItem;
item-&setText(str);
//设置列表项的文本
ui-&listWidget-&addItem(item);
//加载列表项到列表框
//此处若解除注释,将无法添加到列表框
item = NULL;
ui-&lineEdit-&clear();
//清空行编辑框
/***** 删除单个列表项 *****/
void MainWindow::deletebtn()
//获取列表项的指针
QListWidgetItem *item = ui-&listWidget-&takeItem(ui-&listWidget-&currentRow());
delete item;
//释放指针所指向的列表项
/***** 删除多个列表项 *****/
void MainWindow::delallbtn()
int num = ui-&listWidget-&count();
//获取列表项的总数目
ui-&listWidget-&setFocus(); //将光标设置到列表框上,若注释该语句,则删除时,要手动将焦点设置到列表框,即点击列表项
for(int i=0;i#i++)
//逐个获取列表项的指针,并删除
QListWidgetItem *item = ui-&listWidget-&takeItem(ui-&listWidget-&currentRow());
delete item;
/***** 添加多个列表项 *****/
void MainWindow::addallbtn()
QStringList FileNames = QFileDialog::getOpenFileNames(this,&打开&,QDir::currentPath(),&所有文件(*.*);;文本文档(*.txt)&);
ui-&listWidget-&addItems(FileNames);
int index=0,count=0;
QListWidgetItem *item = new QListWidgetI
//…………注释1
count = FileNames.count();
//获取打开文件的总数目
for(index = 0;index&index++)
//这样会报错,无法先取出栈底元素
for(index=count-1;index&=0;index--)
//QList&QString&的数据结构是栈,只能从栈顶取元素
QListWidgetItem *item = new QListWidgetItem;
item-&setText(FileNames.takeAt(index)); //逐个设置列表项的文本
qDebug()&&FileNames.takeAt(index);
//…………注释3
ui-&listWidget-&addItem(item);
//加载列表项到列表框
注意事项:
1、QList&QString&的数据结构是栈,只能从栈顶取元素,所以如果将for循环注释掉,
将注释2解开,程序会出错。因为无法首先取出栈底元素,只能从栈顶开始。
2、对于for循环中的takeAt()函数来说,是将index 所指定的索引位置的数据取走,
并不是复制。所以,如果将注释3的打印语句解开的话,数据元素被取走,无法成功打印,程序出错。
3、如果将for循环中的QListWidgetItem *item = new QListWidgetI语句注释起来,
并将注释1和注释3解开,就可以打印出字符串列表FileNames中所有的字符串。只是运行程序会发成覆盖,
最终显示在列表框中的列表项是栈底元素(编译时,需要将takeAt()函数注释掉)。
/***** 列表项单击操作 *****/
void MainWindow::singleclicked(QListWidgetItem* item)
QMessageBox::information(this,&单击消息&,&单击&+item-&text());
/***** 列表项双击操作 *****/
void MainWindow::doubleclicked(QListWidgetItem* item)
QMessageBox::information(this,&双击消息&,&双击&+item-&text());
一、列表项的显示设置
ui-&listWidget-&setViewMode(QListView::IconMode);&&
//设置显示模式为图标模式
ui-&listWidget-&setViewMode(QListView::ListMode);&&
//设置显示模式为列表模式
二、列表框常用操作
列表框控件常用的操作:添加操作、删除操作、单击操作以及双击操作,下面分别介绍。
1、添加操作
添加操作又可以分为单列表项操作和多列表项操作。
①单列表项操作(以添加用户输入到行编辑框中的数据为例)
voidMainWindow::addbtn()
QStringstr=ui-&lineEdit-&text();&&&&
//获取行编辑框文本
QListWidgetItem*item=newQListWidgetItem;
item-&setText(str);&&&&&&&&&&&&&&&&&&&
&//设置列表项的文本
ui-&listWidget-&addItem(item);& &&//加载列表项到列表框
delete&&&&&&&&&&&&&&&&&&&&&&&&&
//此处若解除注释,将无法添加到列表框
item=NULL;
ui-&lineEdit-&clear();&&&&&&&&&&&&&&&&&
//清空行编辑框
②多列表项操作(以添加多个文件名到列表框为例)
QStringList&QFileDialog::getOpenFileNames&(&QWidget&*&parent&=
0, constQString&&&caption&= QString(), const&QString&&&dir&=
QString(), const&QString&&filter&= QString(),&QString&*&selectedFilter&=
0,&Options&options&=0 )[static]
该静态成员函数将按照给定的参数构造一个模态文件对话框,将用户选择的一个或多个现存的文件的路径名存储到字符串列表中,并返回该字符串列表。
QString&QDir::currentPath&()&[static]
该静态成员函数用来返回应用程序的当前工作目录的绝对路径。
void&QListWidget::addItems&(const&QStringList&&&labels&)
该函数用来将字符串列表中的全部字符串作为列表项,添加到列表框中。
void&QListWidget::addItem&(&QListWidgetItem&*&item&)
该函数用来将一个列表项添加到列表框当中。
注意:一个列表项只能被添加到列表框中一次,如果多次添加同一个列表项到列表框中,将导致不可预期的结果。
void&QListWidget::addItem&(const&QString&&&label&)
重载函数,用来将参数label所引用的字符串作为一个列表项,添加到列表框中。
int&QList::count&()const&&&&
&&&&&int&QList::size&()const
上述两个函数的功能等价,都是用来返回列表中存储的对象元素的个数。
T&QList::takeAt&(&int&i&)
该函数按照参数i指定的索引位置,将存储在列表中对应的对象元素移除并返回。返回类型为模板类型,由存储的数据的类型决定。索引&#20540;的大小范围为<span style="color:#&=
&i &&= size()。
voidMainWindow::addallbtn()
QStringListFileNames=QFileDialog::getOpenFileNames(this,&打开&,
& & &&QDir::currentPath(),
& & &&&所有文件(*.*);;文本文档(*.txt)&);
& & ui-&listWidget-&addItems(FileNames);
voidMainWindow::addallbtn()
& & QStringListFileNames=QFileDialog::getOpenFileNames(this,&打开&,
& & &&QDir::currentPath(),
& & &&&所有文件(*.*);;文本文档(*.txt)&);
intindex=0,count=0;
QListWidgetItem*item=newQListWidgetI&&&&&& //…………注释1
count=FileNames.count();&&&&&&&&&&&
//获取打开文件的总数目
for(index=0;index&index&#43;&#43;)&&&
//这样会报错,无法先取出栈底元素& //注释2
//QList&QString&的数据结构是栈,只能从栈顶取元素
& for(index=count-1;index&=0;index--)&&&&
QListWidgetItem*item=newQListWidgetItem;
item-&setText(FileNames.takeAt(index)); & & & &//逐个设置列表项的文本
qDebug()&&FileNames.takeAt(index);&&&&&&&&&&& //…………注释3
ui-&listWidget-&addItem(item); & & & & & & & & & & & & &&//加载列表项到列表框
注意事项:
1、QList&QString&的数据结构是栈,只能从栈顶取元素,所以如果将for循环注释掉,将注释2解开,程序会出错。因为无法首先取出栈底元素,只能从栈顶开始。
2、对于for循环中的takeAt()函数来说,是将index 所指定的索引位置的数据取走,并不是复制。所以,如果将注释3的打印语句解开的话,数据元素被取走,无法成功打印,程序出错。
3、如果将for循环中的QListWidgetItem *item = new QListWidgetI语句注释起来,并将注释1和注释3解开,就可以打印出字符串列表FileNames中所有的字符串。只是运行程序会发成覆盖,最终显示在列表框中的列表项是栈底元素(编译时,需要将takeAt()函数注释掉)。
2、删除操作
删除操作又可以分为单文件操作和多文件操作。
①删除单个列表项(删除列表框中的单个列表项)
QListWidgetItem&*QListWidget::takeItem&(&int&row&)
该函数用来将索引号为row的列表项从列表框移除,并返回该列表项的指针。
currentRow() const
该常成员函数用来获取当前列表项的索引号,并返回。
voidMainWindow::deletebtn()
//获取列表项的指针
QListWidgetItem*item=ui-&listWidget-&takeItem(ui-&listWidget-&currentRow());
deleteitem;&&&&&&&
//释放指针所指向的列表项
②删除多个文件(删除列表框中的所有列表项)
voidMainWindow::delallbtn()
intnum=ui-&listWidget-&count();&
//获取列表项的总数目
ui-&listWidget-&setFocus(); &&&&
//将光标设置到列表框上
for(inti=0;i&num;i&#43;&#43;)
{&&//逐个获取列表项的指针,并删除
QListWidgetItem*item=ui-&listWidget-&takeItem(ui-&listWidget-&currentRow());
deleteitem;
3、点击操作
①单击操作(输出单击项的文本)
voidMainWindow::singleclicked(QListWidgetItem*item)
QMessageBox::information(this,&单击消息&,&单击&&#43;item-&text());
②双击操作(输出双击项的文本)
voidMainWindow::doubleclicked(QListWidgetItem*item)
QMessageBox::information(this,&双击消息&,&双击&&#43;item-&text());
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:19046次
排名:千里之外
原创:18篇
(5)(3)(2)(4)(7)(1)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'

我要回帖

更多关于 qstringlist删除元素 的文章

 

随机推荐