玉兔远程控制 0.1.0-bate9
载入中...
搜索中...
未找到
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->installEventFilter(this);
18 ui->tvConnect->setModel(&m_ModelConnect);
19 //ui->tvConnect->verticalHeader()->hide();
20 ui->tvConnect->setSelectionMode(QAbstractItemView::MultiSelection);
21 ui->tvConnect->setSelectionBehavior(QAbstractItemView::SelectRows);
22 ui->tvConnect->setEditTriggers(QAbstractItemView::NoEditTriggers);
23 m_ModelConnect.setHorizontalHeaderItem(0, new QStandardItem(tr("IP")));
24 m_ModelConnect.setHorizontalHeaderItem(1, new QStandardItem(tr("Port")));
25 m_ModelConnect.setHorizontalHeaderItem(2, new QStandardItem(tr("Time")));
26 //必须在 setModel 后,才能应用
27 /*第二个参数可以为:
28 QHeaderView::Interactive :0 用户可设置,也可被程序设置成默认大小
29 QHeaderView::Fixed :2 用户不可更改列宽
30 QHeaderView::Stretch :1 根据空间,自动改变列宽,用户与程序不能改变列宽
31 QHeaderView::ResizeToContents:3 根据内容改变列宽,用户与程序不能改变列宽
32 */
33 ui->tvConnect->horizontalHeader()->setSectionResizeMode(
34#if defined(DEBUG) && !defined(Q_OS_ANDROID)
35 0,
36#endif
37 QHeaderView::Interactive);
38
39 Q_ASSERT(pOperate);
40 check = connect(ui->tvConnect, SIGNAL(customContextMenuRequested(const QPoint &)),
41 this, SLOT(slotContextMenuRequested(const QPoint&)));
42 Q_ASSERT(check);
43 ui->pbSettings->setText(pOperate->m_pActionSettings->text());
44 ui->pbSettings->setIcon(pOperate->m_pActionSettings->icon());
45 check = connect(ui->pbSettings, &QPushButton::clicked,
46 pOperate->m_pActionSettings, &QAction::trigger);
47 Q_ASSERT(check);
48 ui->pbStart->setText(pOperate->m_pStart->text());
49 ui->pbStart->setIcon(pOperate->m_pStart->icon());
50 check = connect(ui->pbStart, &QPushButton::clicked,
51 pOperate->m_pStart, &QAction::trigger);
52 Q_ASSERT(check);
53 check = connect(pOperate->m_pStart, &QAction::toggled,
54 this, [this, pOperate](bool checked) {
55 ui->pbStart->setText(pOperate->m_pStart->text());
56 ui->pbStart->setIcon(pOperate->m_pStart->icon());
57 ui->pbStart->setChecked(checked);
58 });
59 Q_ASSERT(check);
60 slotConnectCount(0, 0, 0);
61
62 check = connect(this, &CFrmMain::sigViewerFocusIn,
64 Q_ASSERT(check);
65}
66
67CFrmMain::~CFrmMain()
68{
69 delete ui;
70}
71
72void CFrmMain::slotConnectCount(int nTotal, int nConnect, int nDisconnect)
73{
74 QString szCount = tr("Connect count: Current: %1; Disconnect: %2; Total: %3")
75 .arg(nConnect).arg(nDisconnect).arg(nTotal);
76 ui->lbConnectCount->setText(szCount);
77}
78
79void CFrmMain::slotConnected(const QString& szIp, const quint16 port)
80{
81 QList<QStandardItem*> lstItem;
82 QStandardItem* pIP = new QStandardItem(szIp);
83 lstItem << pIP;
84 QStandardItem* pPort = new QStandardItem(QString::number(port));
85 lstItem << pPort;
86 QStandardItem* pTime = new QStandardItem(QTime::currentTime().toString(
87 QLocale::system().timeFormat()));
88 lstItem << pTime;
89 m_ModelConnect.appendRow(lstItem);
90 ui->tvConnect->resizeColumnToContents(0);
91 ui->tvConnect->resizeColumnToContents(1);
92 ui->tvConnect->resizeColumnToContents(2);
93}
94
95void CFrmMain::slotDisconnected(const QString& szIp, const quint16 port)
96{
97 for (int row = 0; row < m_ModelConnect.rowCount(); row++) {
98 QModelIndex index = m_ModelConnect.index(row, 0);
99 QString ip = m_ModelConnect.data(index).toString();
100 QModelIndex indexPort = m_ModelConnect.index(row, 1);
101 QString szPort = m_ModelConnect.data(indexPort).toString();
102 if (szIp == ip && szPort == QString::number(port)) {
103 m_ModelConnect.removeRows(row, 1);
104 break;
105 }
106 }
107}
108
109void CFrmMain::slotContextMenuRequested(const QPoint& pos)
110{
111 QMenu m;
112 m.addAction(tr("Disconnect"), [this](){
113 QItemSelectionModel* pSelect = ui->tvConnect->selectionModel();
114 QModelIndexList lstIndex = pSelect->selectedRows();
115 foreach(auto index, lstIndex) {
116 QString szIp = m_ModelConnect.item(index.row(), 0)->text();
117 quint16 port = m_ModelConnect.item(index.row(), 1)->text().toUInt();
118 emit sigDisconnect(szIp, port);
119 }
120 });
121 QPoint p = ui->tvConnect->mapToGlobal(pos);
122 m.exec(p);
123}
124
125void CFrmMain::focusInEvent(QFocusEvent *event)
126{
127 emit sigViewerFocusIn(this);
128}
129
130bool CFrmMain::eventFilter(QObject *watched, QEvent *event)
131{
132 switch(event->type()){
133 case QEvent::FocusIn: {
134 emit sigViewerFocusIn(this);
135 event->accept();
136 return true;
137 }
138 default:
139 break;
140 }
141
142 return QWidget::eventFilter(watched, event);
143}
void sigViewerFocusIn(QWidget *pView)
视图获得焦点
void sigViewerFocusIn(QWidget *pView)
视图获得焦点