急求大牛们,QT中怎么向listview中添加内容,用代码怎么实现?

liuqiongkaka 2011-09-23 11:20:54
我现在在做简单的电话簿,想用listview显示内容,通过一些编辑、添加和删除按钮对电话簿进行修改!
第一次用QT,很多不会用,希望各位大牛能帮帮忙。。。
除了listview,还能用什么显示。。。。
谢谢啦!!
...全文
3394 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
我是学友 2011-10-11
  • 打赏
  • 举报
回复
374698016,我的Q
liuqiongkaka 2011-10-11
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 storylsl 的回复:]
引用 18 楼 liuqiongkaka 的回复:
引用 17 楼 storylsl 的回复:
你是在win下还是在linux下?
在linux下的绝对路径是"/home/xmltest/data.txt"这样的,不带引号,路径写成你的就行,win下我记得不太清楚了,一直是在linux下做项目,你要是在win下那就百度一下绝对路径怎么写吧。

至于槽函数,在类的定义的时候不是分publi……
[/Quote
要不我现在先结贴给你分,我另发一个帖子,你帮我解决一下啊!就是你上次告诉我的发射信号和接收信号,我编译时遇到一些问题
我是学友 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 liuqiongkaka 的回复:]
引用 17 楼 storylsl 的回复:
你是在win下还是在linux下?
在linux下的绝对路径是"/home/xmltest/data.txt"这样的,不带引号,路径写成你的就行,win下我记得不太清楚了,一直是在linux下做项目,你要是在win下那就百度一下绝对路径怎么写吧。

至于槽函数,在类的定义的时候不是分public: protected: private: 什么的啊……
[/Quote]
点结贴给分就行了,就冲着你这20分来的,哈哈
开个玩笑,我也刚学没多久,刚毕业,在公司做项目用Qt,做项目学的就快点,以后可以常交流
liuqiongkaka 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 storylsl 的回复:]
你是在win下还是在linux下?
在linux下的绝对路径是"/home/xmltest/data.txt"这样的,不带引号,路径写成你的就行,win下我记得不太清楚了,一直是在linux下做项目,你要是在win下那就百度一下绝对路径怎么写吧。

至于槽函数,在类的定义的时候不是分public: protected: private: 什么的啊,写成private slots:就是私有槽函……
[/Quote]

太好了,我好像理解了!!很感谢你,我怎样才能把那二十分给你,我第一次进Qt论坛,第一次发帖,不知道怎么弄。实在太感谢你了!!
我是学友 2011-10-09
  • 打赏
  • 举报
回复
你是在win下还是在linux下?
在linux下的绝对路径是"/home/xmltest/data.txt"这样的,不带引号,路径写成你的就行,win下我记得不太清楚了,一直是在linux下做项目,你要是在win下那就百度一下绝对路径怎么写吧。

至于槽函数,在类的定义的时候不是分public: protected: private: 什么的啊,写成private slots:就是私有槽函数了,写在这里的函数都是槽函数,可以接收信号,给你举个我写过的例子:
我做过一个日历界面,典型的两个类之间传参数,一个日历本身的类,继承于QCalendarWidget,一个主界面继承于QWidget,其中我要实现的一个功能是当我点击日历查看其他日期时,在主界面上有一个区域是数字日历,要随着点击的日历日期变化而变化,在日历界面中定义:
signals:
void dateChanged(int w,int x,int y,int z);

private slots:
void emitDate();

connect(this,SIGNAL(selectionChanged()),this,SLOT(emitDate()));

void MyCalendar::emitDate()
{
//更改选中日期信号
QDate cDate;
int cYear;
int cMonth;
int cDay;

cDate = selectedDate();
cYear=cDate.year();
cMonth=cDate.month();
cDay=cDate.day();

QDate firstDay(2010,12,31);
QDate today(cYear,cMonth,cDay);
int cdayId=firstDay.daysTo(today);
emit dateChanged(cYear,cMonth,cDay,cdayId);
}

这样,当点击日历时,就发射了一个信号,是点击的日期的年月日等数据
然后,在主界面中接收这个信号:
private slots:
void getDate(int i,int m,int n,int o);

connect(calendar,SIGNAL(dateChanged(int,int,int,int)),this,SLOT(getDate(int,int,int,int)));

void Window::getDate(int i, int m, int n ,int o)
{
//右侧小日历日期更改槽函数
int gYear=i;
int gMonth=m;
int gDay=n;
int gDayId=o;
...
}

很方便的
liuqiongkaka 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 storylsl 的回复:]
引用 13 楼 liuqiongkaka 的回复:
引用 10 楼 hn307165411 的回复:
通过指定lineEdit的parent为listWidget应该就可以解决问题


怎么指定parent,如果指定parent后,一旦lineEdit中的内容改变,listWidget中会自动改变吗?


你可以直接将改变的内容作为信号直接发射出去啊,这样不管在哪都能接收了,很方便……
[/Quote]


怎么收?需要什么函数吗?我知道发是使用emit,收呢?
liuqiongkaka 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 storylsl 的回复:]
引用 4 楼 liuqiongkaka 的回复:
太感谢了。。。。我试着用QListWidget。。谢谢大牛!!


不应该啊,我这段程序是先创建个文件,然后往里面写几条数据,然后在读取这个文件,将里面的数据用QListWidget显示出来的,是自己写的一段小的测试程序,应该是没问题的,数据我写了几条,其中只有几条是拟定的需要的数据,也就是自己加了个纠错机制,以&为分隔符分割每条数……
[/Quote]

我把路径改为“E:/Qt/projects/1/1.txt”.并且运行了你的程序,编译能通过,弹出的界面中listWidget中没有东西,不知道为什么?
我是学友 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 liuqiongkaka 的回复:]
引用 10 楼 hn307165411 的回复:
通过指定lineEdit的parent为listWidget应该就可以解决问题


怎么指定parent,如果指定parent后,一旦lineEdit中的内容改变,listWidget中会自动改变吗?
[/Quote]

你可以直接将改变的内容作为信号直接发射出去啊,这样不管在哪都能接收了,很方便啊,我经常这么干,两个不同的界面或是两个不同的类互相传参数,就发射信号,不管在哪不管是谁都可以收
liuqiongkaka 2011-10-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hn307165411 的回复:]
通过指定lineEdit的parent为listWidget应该就可以解决问题
[/Quote]

怎么指定parent,如果指定parent后,一旦lineEdit中的内容改变,listWidget中会自动改变吗?
j_qinshou 2011-10-01
  • 打赏
  • 举报
回复
用QListWidget 里面的addItems()。。。。
我是学友 2011-09-30
  • 打赏
  • 举报
回复
lineEdit的信号函数:
void cursorPositionChanged ( int old, int new ) 
void editingFinished ()
void returnPressed ()
void selectionChanged ()
void textChanged ( const QString & text )
void textEdited ( const QString & text )


你要用哪个,只要在自己定义的函数中发射这个信号就行,然后不管在哪,只要接收这个信号就行
信号和槽函数要灵活运用
hniyani 2011-09-30
  • 打赏
  • 举报
回复
通过指定lineEdit的parent为listWidget应该就可以解决问题
liuqiongkaka 2011-09-30
  • 打赏
  • 举报
回复
哦,这样啊!
再请教一个问题,qt中参数传递问题!
我在主界面有个ListWdiget和一个按钮,我点击按钮弹出另一个编辑界面,我通过在弹出的界面的lineEdit中输入数据后,数据怎么传回主角面,进而怎么在ListWidget中显示出来
我是学友 2011-09-29
  • 打赏
  • 举报
回复
就是QFile file_r("/home/xmltest/data.txt");
QFile file_w("/home/xmltest/data.txt");
这俩读写文件的路径,你自己换一个你存在的路径,文件名无所谓,前后一致就行
我是学友 2011-09-29
  • 打赏
  • 举报
回复
可能是路径不对吧,你自己写一个你文件夹里存在的路径,最好是有文件夹存在的路径,创建文件如果路径里没有文件夹是不会创建文件夹的
我是学友 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liuqiongkaka 的回复:]
太感谢了。。。。我试着用QListWidget。。谢谢大牛!!
[/Quote]

不应该啊,我这段程序是先创建个文件,然后往里面写几条数据,然后在读取这个文件,将里面的数据用QListWidget显示出来的,是自己写的一段小的测试程序,应该是没问题的,数据我写了几条,其中只有几条是拟定的需要的数据,也就是自己加了个纠错机制,以&为分隔符分割每条数据,只有满足一定条件的数据才是我想要的正确的数据。在你那能不能编译通过啊?
liuqiongkaka 2011-09-29
  • 打赏
  • 举报
回复
我运行了你的代码,但是listWidget中还是没有显示东西出来啊。。。我不太懂,请大牛请教

还有那个路径/home是固定的吗?文件路径是必须跟工程所在的路径一样吗?

想用链表的形式存储,怎么把链表内容写入文件和从文件中读内容到链表
liuqiongkaka 2011-09-29
  • 打赏
  • 举报
回复
太感谢了。。。。我试着用QListWidget。。谢谢大牛!!
Lutx 2011-09-23
  • 打赏
  • 举报
回复
如果用listview, 那么还需要定义一个相关Model类和对象, 所有对数据的操作都在model对象中完成.
简单点的话就如上面所说的, 用QListWidget类就可以了.
我是学友 2011-09-23
  • 打赏
  • 举报
回复
int main(int argc ,char *argv[])
{
QApplication app(argc,argv);

QWidget* widget = new QWidget;
QListWidget* listWidget = new QListWidget;
QVBoxLayout* layout = new QVBoxLayout;
QStringList readDate;
QStringList dateList;
dateList<<"gfsdj"
<<"sghfjs"
<<"s2222";
<<"shdkahsd&skdfh&lskdhf&sdlkfh93"
<<"786ri&d89fys&skdfh87w"
<<"sdhkf sjd89f7"
qDebug()<<dateList;

QFile file_w("/home/xmltest/data.txt");
if(!file_w.open(QIODevice::Append | QIODevice::Text))
{
qDebug("fail");
}
QTextStream tt(&file_w);
for(int i=0;i<3;i++)
{
tt<<dateList.value(i)<<endl;
}
file_w.close();

QFile file_r("/home/xmltest/data.txt");
if (!file_r.open(QIODevice::ReadOnly | QIODevice::Text))
{
qDebug("fail");
}
while (!file_r.atEnd())
{
QByteArray line = file_r.readLine();
readDate.clear();
readDate=QString(line).split("&");
if(readDate.size()==3)
{
QString tmp =readDate.at(0);
QString name=readDate.at(1);
QString time=readDate.at(2);
listWidget->addItem(QString("%1 %2 %3").arg(tmp,name,time));
}
}
file_r.close();

layout->addWidget(listWidget);
widget->setLayout(layout);
widget->show();
}


直接就能运行的代码,自己改一下文件的读取路径,好好看看吧,先是写文件,然后读文件,读文件的时候对数据进行分析,只要需要的数据,这段代码可以满足你的要求,当然是得你自己编成你需要的,不会的看看帮助文档
加载更多回复(1)

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧