// // Created by dongl on 23-6-1. // // You may need to build the project (run Qt uic code generator) to get "ui_addfrindwindow.h" resolved #include #include #include "ui_addfrindwindow.h" #include "addfrindwindow.h" #include "ClientExample.h" addfrindwindow::addfrindwindow(QWidget *parent) : QWidget(parent), ui(new Ui::addfrindwindow), userOperation(new UserOperation(ClientExample::run())) { ui->setupUi(this); connect(ui->search, SIGNAL(returnPressed()), this, SLOT(get_search_input())); } addfrindwindow::~addfrindwindow() { delete ui; } // add 搜索框 void addfrindwindow::get_search_input() { // 取搜索框值 QString search_value = ui->search->text(); // 开始搜索 暂时只显示 auto ret = userOperation->fetch_user(strtol(search_value.toStdString().c_str(), nullptr, 0)); if (ret.has_value()) { if (ret.value().m_sri.subcommand() == mp::MP_SUB_TYPE::MP_SEARCH_SUCCESS) { search_value.append(" "); search_value.append(ret.value().m_sri.username().c_str()); search_value.append(" "); search_value.append(ret.value().m_sri.msg().c_str()); user_show_info = true; user.account = ret.value().m_sri.account(); user.username = ret.value().m_sri.username(); user.email = ret.value().m_sri.email(); } else { search_value.append(" "); search_value.append(ret.value().m_sri.msg().c_str()); search_value.append(" "); // 返回 查询 sql 为啥查不到的类型 后面 搞个映射吧 search_value.append(std::to_string(ret.value().m_sri.subcommand()).c_str()); user_show_info = false; } } else { user_show_info = false; search_value = "键入数据不合法!"; } // 添加显示数据 QStringList list; list.append(search_value); // 使用数据列表创建数据显示模型 QStringListModel* model = new QStringListModel(list); // 加载到 view ui->listView->setModel(model); //设置模型到listview上 不可编辑 ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers); // 显示数据右键菜单 // ui->listView->setContextMenuPolicy(Qt::CustomContextMenu); ui->listView->setContextMenuPolicy(Qt::ActionsContextMenu); // void QWidget::contextMenuEvent ( QContextMenuEvent* ); // void QWidget::customContextMenuRequested( const QPoint& pos ); //右击绑定事件 // connect(ui->listView, SIGNAL(customContextMenuRequested(const QPoint&)), // this, SLOT(show_Contextmenu(const QPoint&))); } // 重载此函数 右键 菜单 内容 // 但需要 ui->listView->setContextMenuPolicy(Qt::ActionsContextMenu); 绑定事件 void addfrindwindow::contextMenuEvent(QContextMenuEvent *) { if (user_show_info) { QMenu *cmenu = new QMenu(ui->listView); QAction *addAction = cmenu->addAction("添加"); QAction *userHomeAction = cmenu->addAction("个人主页"); QAction *sayHelloAction = cmenu->addAction("打招呼"); connect(addAction, SIGNAL(triggered(bool)), this, SLOT(add_friends_action())); connect(userHomeAction, SIGNAL(triggered(bool)), this, SLOT(user_home_action())); connect(sayHelloAction, SIGNAL(triggered(bool)), this, SLOT(say_hello_action())); cmenu->exec(QCursor::pos()); ui->listView->selectionModel()->clear(); delete cmenu; // 堆内的参数 不用delete 还有qt有文件树? 用不上特严格的delete // delete addAction; // delete userHomeAction; // delete sayHelloAction; } } void addfrindwindow::add_friends_action() { // userOperation; } void addfrindwindow::user_home_action() { printf("222"); } void addfrindwindow::say_hello_action() { printf("333"); }