QT,我正在用QTcreator写一个类似QQ的聊天工具,其中涉及到好友列表

QT,我正在用QTcreator写一个类似QQ的聊天工具,其中涉及到好友列表,第1张

我有个思路,你的好友列表既然是treeWidgetItem ,那么,当你打开聊天对话框的时候你就给对应的好友所在的Item设置一下,item->setText(1,"OPEN");关闭对话框的时候设置为"Close";

然后再双击的时候就判断那个Item的第一个Text的值,查看是否为close,是的话就打开对话框,不是的话就不打开。

我想这个思路应该可行,有问题再补充!

DateValue

DateValue函数 返回

返回一个 Variant (Date)。

语法

DateValue(date)

必要的 date 参数 date 通常是字符串表达式,表示从 100 年 1 月 1 日到 9999 年 12 月 31 日之间的一个日期。但是,date 也可以是任何表达式,其所代表的日期、时间在上述范围内。

1继承QTreewidget重新实现他的mouseReleaseEvent方法,为什么是release方法,因为源码里面mousePressEvent方法用来绘制treeWidget,而release方法则会发送出点击事件的信号

#ifndefTREEWIDGET_H

#define TREEWIDGET_H

#ifndef TREEWIDGET_H

#define TREEWIDGET_H

#include <QWidget>

#include <QTreeWidget>

#include <QMouseEvent>

class QTreeWidget2 : public QTreeWidget

{

Q_OBJECT

public:

explicit QTreeWidget2( QWidget parent = 0 );

protected:

void mouseReleaseEvent (QMouseEvent event);

};

#endif // TREEWIDGET_H

2实现

#include "treeWidgeth"

QTreeWidget2::QTreeWidget2( QWidget parent)

:QTreeWidget(parent)

{

}

void QTreeWidget2::mouseReleaseEvent (QMouseEvent event)

{

if (event->button () & Qt::RightButton )

{

emit customContextMenuRequested( event->pos ());

}else if (event->button () & Qt::LeftButton){

emit itemClicked(itemFromIndex (indexAt ( event->pos () )),indexAt ( event->pos () )column ());

}

}

3测试

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include <QMainWindow>

#include <QTreeWidgetItem>

class QTreeWidget2;

static const int itemtype1 = QTreeWidgetItem::Type;

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow( QWidget parent = 0 );

public slots:

void setTest2(const QPoint &pos);

void setTest(QTreeWidgetItemitem,int column);

private:

QTreeWidget2 treeWidget;

QTreeWidgetItem currentItem;

};

#endif // MAINWINDOW_H

#include "mainwindowh"

#include "treeWidgeth"

#include <QMessageBox>

#include <QtDebug>

MainWindow::MainWindow(QWidget parent):

QMainWindow(parent)

{

treeWidget = new QTreeWidget2;

treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);

treeWidget->setHeaderLabel ( tr("资源列表") );

QTreeWidgetItem root = new QTreeWidgetItem( treeWidget );

root->setText (0,tr("root"));

QTreeWidgetItem item = new QTreeWidgetItem( root );

item->setText (0,tr("a"));

QTreeWidgetItem item1 = new QTreeWidgetItem( item );

item1->setText (0,tr("b"));

QTreeWidgetItem item2 = new QTreeWidgetItem( item1 );

item2->setText (0,tr("c"));

connect( treeWidget,SIGNAL(customContextMenuRequested( const QPoint &)),

this,SLOT(setTest2(const QPoint &)));

connect( treeWidget,SIGNAL(itemClicked(QTreeWidgetItem,int)),

this,SLOT(setTest(QTreeWidgetItem,int)));

setCentralWidget ( treeWidget );

resize ( 500,400 );

}

void MainWindow::setTest2(const QPoint &pos)

{

currentItem = treeWidget->itemAt(pos);

if ( currentItem == NULL )

return;

QMessageBox::warning (this,tr("test"),tr("hello"));

}

void MainWindow::setTest(QTreeWidgetItemitem,int column)

{

QMessageBox::warning (this,tr("asd"),tr("sd"));

增与删

下面是添加的功能:

//这是添加根节点的功能实现this->connect(ui->Root_btn, SIGNAL(clicked(bool)), this, SLOT(addRoot()));void Widget::addRoot()

{

QString one = ui->first->text();

QString two = ui->second->text();

QString three = ui->third->text();

QTreeWidgetItem item = new QTreeWidgetItem();

item->setText(0, one);

item->setText(1, two);

item->setText(2, three);

ui->Tree->addTopLevelItem(item);

}//这是添加叶子节点的实现this->connect(ui->Child_btn, SIGNAL(clicked(bool)), this, SLOT(addChild()));void Widget::addChild()

{

QString one = ui->first->text();

QString two = ui->second->text();

QString three = ui->third->text();

QTreeWidgetItem parent = ui->Tree->currentItem();

QTreeWidgetItem item = new QTreeWidgetItem();

item->setText(0, one);

item->setText(1, two);

item->setText(2, three); parent->addChild(item);

}

添加叶子节点字需要注意父节点的获取就可以了。

下面是删除节点的功能:

this->connect(ui->DEL_btn, SIGNAL(clicked(bool)), this, SLOT(deleteNode()));

void del(QTreeWidgetItem node){ if(node->childCount() > 0)

{ for(int i = 0; i < node->childCount(); i ++)

{ del(node->child(i));

}

}

else

{

delete node;

}

}

void Widget::deleteNode()

{

QTreeWidgetItem item = ui->Tree->currentItem();

if(item->childCount() > 0)

{ for(int i = 0; i < item->childCount(); i ++)

{ del(item->child(i));

}

}

delete item;

}

删除节点时记得循环删除这个节点下面的所有的子节点。

给你一个示例代码吧,引用了jQuery框架。你可以将这个js文件下载到本地或直接使用例子中的远程地址

<!DOCTYPE HTML>

<html>

<head>

<script src=">

以上就是关于QT,我正在用QTcreator写一个类似QQ的聊天工具,其中涉及到好友列表全部的内容,包括:QT,我正在用QTcreator写一个类似QQ的聊天工具,其中涉及到好友列表、在qtreewidgetitem中data函数怎么用、求教QTreeWidget的itemClicked等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9313984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存