玉兔远程控制 0.1.0-bate6
载入中...
搜索中...
未找到
FrmMain.cpp
1#include <QLocale>
2#include <QLoggingCategory>
3
4#include "FrmMain.h"
5#include "ui_FrmMain.h"
6#include "OperateFtpServer.h"
7
8static Q_LOGGING_CATEGORY(log, "FtpServer.FrmMain")
9CFrmMain::CFrmMain(COperateFtpServer *pOperate, QWidget *parent)
10 : QWidget(parent)
11 , ui(new Ui::CFrmMain)
12 , m_ModelConnect(this)
13{
14 bool check = false;
15 ui->setupUi(this);
16
17 ui->tvConnect->setModel(&m_ModelConnect);
18 //ui->tvConnect->verticalHeader()->hide();
19 ui->tvConnect->setSelectionMode(QAbstractItemView::MultiSelection);
20 ui->tvConnect->setSelectionBehavior(QAbstractItemView::SelectRows);
21 ui->tvConnect->setEditTriggers(QAbstractItemView::NoEditTriggers);
22 m_ModelConnect.setHorizontalHeaderItem(0, new QStandardItem(tr("IP")));
23 m_ModelConnect.setHorizontalHeaderItem(1, new QStandardItem(tr("Port")));
24 m_ModelConnect.setHorizontalHeaderItem(2, new QStandardItem(tr("Time")));
25 //必须在 setModel 后,才能应用
26 /*第二个参数可以为:
27 QHeaderView::Interactive :0 用户可设置,也可被程序设置成默认大小
28 QHeaderView::Fixed :2 用户不可更改列宽
29 QHeaderView::Stretch :1 根据空间,自动改变列宽,用户与程序不能改变列宽
30 QHeaderView::ResizeToContents:3 根据内容改变列宽,用户与程序不能改变列宽
31 */
32 ui->tvConnect->horizontalHeader()->setSectionResizeMode(
33#if defined(DEBUG) && !defined(Q_OS_ANDROID)
34 0,
35#endif
36 QHeaderView::Interactive);
37
38 check = connect(ui->tvConnect, SIGNAL(customContextMenuRequested(const QPoint &)),
39 this, SLOT(slotContextMenuRequested(const QPoint&)));
40 Q_ASSERT(check);
41 ui->pbSettings->setText(pOperate->m_pActionSettings->text());
42 ui->pbSettings->setIcon(pOperate->m_pActionSettings->icon());
43 check = connect(ui->pbSettings, &QPushButton::clicked,
44 pOperate->m_pActionSettings, &QAction::trigger);
45 Q_ASSERT(check);
46 ui->pbStart->setText(pOperate->m_pStart->text());
47 ui->pbStart->setIcon(pOperate->m_pStart->icon());
48 check = connect(ui->pbStart, &QPushButton::clicked,
49 pOperate->m_pStart, &QAction::trigger);
50 Q_ASSERT(check);
51 check = connect(pOperate->m_pStart, &QAction::toggled,
52 this, [this, pOperate](bool checked) {
53 ui->pbStart->setText(pOperate->m_pStart->text());
54 ui->pbStart->setIcon(pOperate->m_pStart->icon());
55 ui->pbStart->setChecked(checked);
56 });
57 Q_ASSERT(check);
58 slotConnectCount(0, 0, 0);
59}
60
61CFrmMain::~CFrmMain()
62{
63 delete ui;
64}
65
66void CFrmMain::slotConnectCount(int nTotal, int nConnect, int nDisconnect)
67{
68 QString szCount = tr("Connect count: Current: %1; Disconnect: %2; Total: %3")
69 .arg(nConnect).arg(nDisconnect).arg(nTotal);
70 ui->lbConnectCount->setText(szCount);
71}
72
73void CFrmMain::slotConnected(const QString& szIp, const quint16 port)
74{
75 QList<QStandardItem*> lstItem;
76 QStandardItem* pIP = new QStandardItem(szIp);
77 lstItem << pIP;
78 QStandardItem* pPort = new QStandardItem(QString::number(port));
79 lstItem << pPort;
80 QStandardItem* pTime = new QStandardItem(QTime::currentTime().toString(
81 QLocale::system().timeFormat()));
82 lstItem << pTime;
83 m_ModelConnect.appendRow(lstItem);
84 ui->tvConnect->resizeColumnToContents(0);
85 ui->tvConnect->resizeColumnToContents(1);
86 ui->tvConnect->resizeColumnToContents(2);
87}
88
89void CFrmMain::slotDisconnected(const QString& szIp, const quint16 port)
90{
91 for (int row = 0; row < m_ModelConnect.rowCount(); row++) {
92 QModelIndex index = m_ModelConnect.index(row, 0);
93 QString ip = m_ModelConnect.data(index).toString();
94 QModelIndex indexPort = m_ModelConnect.index(row, 1);
95 QString szPort = m_ModelConnect.data(indexPort).toString();
96 if (szIp == ip && szPort == QString::number(port)) {
97 m_ModelConnect.removeRows(row, 1);
98 break;
99 }
100 }
101}
102
103void CFrmMain::slotContextMenuRequested(const QPoint& pos)
104{
105 QMenu m;
106 m.addAction(tr("Disconnect"), [this](){
107 QItemSelectionModel* pSelect = ui->tvConnect->selectionModel();
108 QModelIndexList lstIndex = pSelect->selectedRows();
109 foreach(auto index, lstIndex) {
110 QString szIp = m_ModelConnect.item(index.row(), 0)->text();
111 quint16 port = m_ModelConnect.item(index.row(), 1)->text().toUInt();
112 emit sigDisconnect(szIp, port);
113 }
114 });
115 QPoint p = ui->tvConnect->mapToGlobal(pos);
116 m.exec(p);
117}