git-svn-id: svn://db.shs.com.ru/libs@557 a8b55f48-bf90-11e4-a774-851b48703e85
This commit is contained in:
@@ -3,7 +3,7 @@ file(GLOB SRC "*.h" "*.cpp" "*.ui" "*.qrc" "lang/*.ts")
|
|||||||
find_qt(${QtVersions} Core Gui)
|
find_qt(${QtVersions} Core Gui)
|
||||||
qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM)
|
qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM)
|
||||||
qt_add_executable(${PROJECT_NAME} WIN32 out_CPP)
|
qt_add_executable(${PROJECT_NAME} WIN32 out_CPP)
|
||||||
qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets piqt_utils)
|
qt_target_link_libraries(${PROJECT_NAME} pip qad_utils qad_widgets qad_application piqt_utils)
|
||||||
message(STATUS "Building ${PROJECT_NAME}")
|
message(STATUS "Building ${PROJECT_NAME}")
|
||||||
if(LIB)
|
if(LIB)
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
|
|||||||
@@ -2,23 +2,65 @@
|
|||||||
#include "pifile.h"
|
#include "pifile.h"
|
||||||
#include "pitime.h"
|
#include "pitime.h"
|
||||||
#include "pidir.h"
|
#include "pidir.h"
|
||||||
|
#include "pichunkstream.h"
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
|
#include <QScrollBar>
|
||||||
|
|
||||||
|
#include <cxxabi.h>
|
||||||
|
const QString demangle(const char * name) {
|
||||||
|
int status = -4;
|
||||||
|
char * res = abi::__cxa_demangle(name, NULL, NULL, &status);
|
||||||
|
QString ret((status == 0) ? res : name);
|
||||||
|
free(res);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
QPIIntrospector::QPIIntrospector(QWidget * parent): QMainWindow(parent), peer("__introspection_client__") {
|
enum ColumnContainers {
|
||||||
|
ccType,
|
||||||
|
ccCount,
|
||||||
|
ccItems,
|
||||||
|
ccBytesAllocated,
|
||||||
|
ccBytesUsed,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ColumnObjects {
|
||||||
|
coClassName,
|
||||||
|
coName,
|
||||||
|
coParents,
|
||||||
|
coQueuedEvents,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
QPIIntrospector::QPIIntrospector(QWidget * parent): EMainWindow(parent), peer("__introspection_client__") {
|
||||||
setupUi(this);
|
setupUi(this);
|
||||||
|
session.setFile("qpiintrospector_session.conf");
|
||||||
#if QT_VERSION >= 0x050000
|
#if QT_VERSION >= 0x050000
|
||||||
tree->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
//treeContainers->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
|
||||||
#else
|
#else
|
||||||
tree->header()->setResizeMode(QHeaderView::ResizeToContents);
|
//treeContainers->header()->setResizeMode(QHeaderView::ResizeToContents);
|
||||||
#endif
|
#endif
|
||||||
CONNECTU(&peer, dataReceivedEvent, this, peerReceived)
|
CONNECTU_QUEUED(&peer, peerConnectedEvent, this, peersChanged, this);
|
||||||
startTimer(100);
|
CONNECTU_QUEUED(&peer, peerDisconnectedEvent, this, peersChanged, this);
|
||||||
|
CONNECTU_QUEUED(&peer, dataReceivedEvent, this, peerReceived, this);
|
||||||
|
CONNECTU(&peer, peerConnectedEvent, this, reqProcPIEvents);
|
||||||
|
CONNECTU(&peer, peerDisconnectedEvent, this, reqProcPIEvents);
|
||||||
|
CONNECTU(&peer, dataReceivedEvent, this, reqProcPIEvents);
|
||||||
|
//startTimer(100);
|
||||||
|
session.addEntry(this);
|
||||||
|
session.load();
|
||||||
|
peer.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QPIIntrospector::~QPIIntrospector() {
|
||||||
|
session.save();
|
||||||
|
peer.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QPIIntrospector::changeEvent(QEvent * e) {
|
void QPIIntrospector::changeEvent(QEvent * e) {
|
||||||
QMainWindow::changeEvent(e);
|
EMainWindow::changeEvent(e);
|
||||||
switch (e->type()) {
|
switch (e->type()) {
|
||||||
case QEvent::LanguageChange:
|
case QEvent::LanguageChange:
|
||||||
retranslateUi(this);
|
retranslateUi(this);
|
||||||
@@ -30,6 +72,124 @@ void QPIIntrospector::changeEvent(QEvent * e) {
|
|||||||
|
|
||||||
|
|
||||||
void QPIIntrospector::timerEvent(QTimerEvent * ) {
|
void QPIIntrospector::timerEvent(QTimerEvent * ) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QPIIntrospector::buildTree(QByteArray d) {
|
||||||
|
/*PIVector<PIIntrospectionThreads::ThreadInfo> threads;
|
||||||
|
PIByteArray pd = Q2PIByteArray(d);
|
||||||
|
pd >> threads;
|
||||||
|
treeContainers->clear();
|
||||||
|
piForeachC (PIIntrospectionThreads::ThreadInfo & t, threads) {
|
||||||
|
QTreeWidgetItem * ti = new QTreeWidgetItem();
|
||||||
|
ti->setText(0, QString(PI2QString(t.name) + " (%1)").arg(t.id));
|
||||||
|
treeContainers->addTopLevelItem(ti);
|
||||||
|
}*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QPIIntrospector::buildDumpSection(QTreeWidgetItem * pi, PIString & str) {
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QPIIntrospector::showInfo(const PIIntrospection::ProcessInfo & info) {
|
||||||
|
PIString s;
|
||||||
|
s << info.execCommand << "\n";
|
||||||
|
s << info.execDateTime.toString() << "\n";
|
||||||
|
s << info.OS_name << "(" << info.OS_version << ", " << info.architecture << ")\n";
|
||||||
|
s << info.user << "\n";
|
||||||
|
s << info.build_options.join(", ");
|
||||||
|
labelInfo->setText(PI2QString(s));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QPIIntrospector::showContainers(const PIMap<uint, PIIntrospectionContainers::Type> & data, const PIMap<uint, PIString> & typenames) {
|
||||||
|
int vpos = treeContainers->verticalScrollBar()->value();
|
||||||
|
treeContainers->clear();
|
||||||
|
for (auto i = data.constBegin(); i != data.constEnd(); ++i) {
|
||||||
|
QTreeWidgetItem * ti = new QTreeWidgetItem();
|
||||||
|
ti->setText(ccType, demangle(typenames.value(i.key(), PIString::fromNumber(i.key())).dataAscii()));
|
||||||
|
ti->setText(ccCount, QString::number(i.value().count));
|
||||||
|
ti->setText(ccItems, QString::number(i.value().items));
|
||||||
|
ti->setText(ccBytesAllocated, PI2QString(PIString::readableSize(i.value().bytes_allocated)));
|
||||||
|
ti->setText(ccBytesUsed, PI2QString(PIString::readableSize(i.value().bytes_used)));
|
||||||
|
treeContainers->addTopLevelItem(ti);
|
||||||
|
}
|
||||||
|
treeContainers->verticalScrollBar()->setValue(vpos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QPIIntrospector::showObjects(const PIVector<PIIntrospection::ObjectInfo> & objects) {
|
||||||
|
QHash<QString, int> stat;
|
||||||
|
|
||||||
|
int vpos = treeObjects->verticalScrollBar()->value();
|
||||||
|
treeObjects->clear();
|
||||||
|
piForeachC (PIIntrospection::ObjectInfo & i, objects) {
|
||||||
|
stat[PI2QString(i.classname)]++;
|
||||||
|
QTreeWidgetItem * ti = new QTreeWidgetItem();
|
||||||
|
ti->setText(coClassName, PI2QString(i.classname));
|
||||||
|
ti->setText(coName, PI2QString(i.name));
|
||||||
|
ti->setText(coParents, PI2QString(i.parents.join(":")));
|
||||||
|
ti->setText(coQueuedEvents, QString::number(i.queued_events));
|
||||||
|
treeObjects->addTopLevelItem(ti);
|
||||||
|
}
|
||||||
|
treeObjects->verticalScrollBar()->setValue(vpos);
|
||||||
|
|
||||||
|
vpos = treeObjectsStat->verticalScrollBar()->value();
|
||||||
|
treeObjectsStat->clear();
|
||||||
|
for (auto i = stat.constBegin(); i != stat.constEnd(); ++i) {
|
||||||
|
QTreeWidgetItem * ti = new QTreeWidgetItem();
|
||||||
|
ti->setText(0, i.key());
|
||||||
|
ti->setText(1, QString::number(i.value()));
|
||||||
|
treeObjectsStat->addTopLevelItem(ti);
|
||||||
|
}
|
||||||
|
treeObjectsStat->verticalScrollBar()->setValue(vpos);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QPIIntrospector::on_listApp_currentRowChanged(int r) {
|
||||||
|
if (r < 0) cur_server.clear();
|
||||||
|
else cur_server = Q2PIString(listApp->item(r)->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QPIIntrospector::peerReceived(const PIString & from, const PIByteArray & data) {
|
||||||
|
if (from != cur_server) return;
|
||||||
|
//piCout << "rec" << data.size();
|
||||||
|
PIByteArray ba(data);
|
||||||
|
if (ba.size_s() < 4) return;
|
||||||
|
uint sign(0); ba >> sign;
|
||||||
|
if (sign != PIIntrospection::sign) return;
|
||||||
|
PIChunkStream cs(ba);
|
||||||
|
PIByteArray pba;
|
||||||
|
while (!cs.atEnd()) {
|
||||||
|
switch (cs.read()) {
|
||||||
|
case 1: {
|
||||||
|
cs.get(pba);
|
||||||
|
PIIntrospection::ProcessInfo info;
|
||||||
|
PIIntrospection::unpackInfo(pba, info);
|
||||||
|
showInfo(info);
|
||||||
|
} break;
|
||||||
|
case 2: {
|
||||||
|
cs.get(pba);
|
||||||
|
PIMap<uint, PIIntrospectionContainers::Type> data;
|
||||||
|
PIMap<uint, PIString> typenames;
|
||||||
|
PIIntrospection::unpackContainers(pba, data, typenames);
|
||||||
|
showContainers(data, typenames);
|
||||||
|
} break;
|
||||||
|
case 4: {
|
||||||
|
cs.get(pba);
|
||||||
|
PIVector<PIIntrospection::ObjectInfo> objects;
|
||||||
|
PIIntrospection::unpackObjects(pba, objects);
|
||||||
|
showObjects(objects);
|
||||||
|
} break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QPIIntrospector::peersChanged(const PIString & name) {
|
||||||
listApp->blockSignals(true);
|
listApp->blockSignals(true);
|
||||||
QString cs = listApp->currentItem() ? listApp->currentItem()->text() : "";
|
QString cs = listApp->currentItem() ? listApp->currentItem()->text() : "";
|
||||||
listApp->clear();
|
listApp->clear();
|
||||||
@@ -43,41 +203,3 @@ void QPIIntrospector::timerEvent(QTimerEvent * ) {
|
|||||||
peer.unlock();
|
peer.unlock();
|
||||||
listApp->blockSignals(false);
|
listApp->blockSignals(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QPIIntrospector::buildTree(QByteArray d) {
|
|
||||||
PIVector<PIIntrospectionThreads::ThreadInfo> threads;
|
|
||||||
PIByteArray pd = Q2PIByteArray(d);
|
|
||||||
pd >> threads;
|
|
||||||
tree->clear();
|
|
||||||
piForeachC (PIIntrospectionThreads::ThreadInfo & t, threads) {
|
|
||||||
QTreeWidgetItem * ti = new QTreeWidgetItem();
|
|
||||||
ti->setText(0, QString(PI2QString(t.name) + " (%1)").arg(t.id));
|
|
||||||
tree->addTopLevelItem(ti);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void QPIIntrospector::buildDumpSection(QTreeWidgetItem * pi, PIString & str) {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void QPIIntrospector::on_listApp_currentRowChanged(int r) {
|
|
||||||
if (r < 0) cur_server.clear();
|
|
||||||
else cur_server = Q2PIString(listApp->item(r)->text());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void QPIIntrospector::peerReceived(const PIString & from, const PIByteArray & data) {
|
|
||||||
if (from != cur_server) return;
|
|
||||||
PIString appname;
|
|
||||||
PIIntrospectionContainers cont;
|
|
||||||
PIByteArray ba(data);
|
|
||||||
ba >> appname >> cont;// >> threads.threads;
|
|
||||||
/*QMetaObject::invokeMethod(labelAppname, "setText", Qt::QueuedConnection, Q_ARG(QString, PI2QString(appname)));
|
|
||||||
QMetaObject::invokeMethod(labelCount, "setText", Qt::QueuedConnection, Q_ARG(QString, QString::number(cont.count)));
|
|
||||||
QMetaObject::invokeMethod(labelAlloc, "setText", Qt::QueuedConnection, Q_ARG(QString, PI2QString(PIString::readableSize(cont.bytes_allocated))));
|
|
||||||
QMetaObject::invokeMethod(labelUsed, "setText", Qt::QueuedConnection, Q_ARG(QString, PI2QString(PIString::readableSize(cont.bytes_used))));
|
|
||||||
QMetaObject::invokeMethod(this, "buildTree", Qt::QueuedConnection, Q_ARG(QByteArray, PI2QByteArray(ba)));*/
|
|
||||||
//piCout << appname;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -6,30 +6,38 @@
|
|||||||
#include <QTime>
|
#include <QTime>
|
||||||
#include <QDesktopWidget>
|
#include <QDesktopWidget>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <emainwindow.h>
|
||||||
#include "piqt.h"
|
#include "piqt.h"
|
||||||
#include "pipeer.h"
|
#include "pipeer.h"
|
||||||
#include "piintrospection_containers_p.h"
|
#include "piintrospection_server_p.h"
|
||||||
#include "piintrospection_threads_p.h"
|
|
||||||
|
|
||||||
class QPIIntrospector: public QMainWindow, private Ui::QPIIntrospector, public PIObject
|
class QPIIntrospector: public EMainWindow, private Ui::QPIIntrospector, public PIObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
PIOBJECT(QPIIntrospector)
|
PIOBJECT(QPIIntrospector)
|
||||||
public:
|
public:
|
||||||
QPIIntrospector(QWidget * parent = 0);
|
QPIIntrospector(QWidget * parent = 0);
|
||||||
|
~QPIIntrospector();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void changeEvent(QEvent * e);
|
void changeEvent(QEvent * e);
|
||||||
void timerEvent(QTimerEvent * );
|
void timerEvent(QTimerEvent * );
|
||||||
|
|
||||||
void buildDumpSection(QTreeWidgetItem * pi, PIString & str);
|
void buildDumpSection(QTreeWidgetItem * pi, PIString & str);
|
||||||
|
void showInfo(const PIIntrospection::ProcessInfo & info);
|
||||||
|
void showContainers(const PIMap<uint, PIIntrospectionContainers::Type> & data, const PIMap<uint, PIString> & typenames);
|
||||||
|
void showObjects(const PIVector<PIIntrospection::ObjectInfo> & objects);
|
||||||
|
|
||||||
|
EVENT_HANDLER(void, reqProcPIEvents) {QMetaObject::invokeMethod(this, "procPIEvents", Qt::QueuedConnection);}
|
||||||
|
|
||||||
EVENT_HANDLER2(void, peerReceived, const PIString &, from, const PIByteArray &, data);
|
EVENT_HANDLER2(void, peerReceived, const PIString &, from, const PIByteArray &, data);
|
||||||
|
EVENT_HANDLER1(void, peersChanged, const PIString &, name);
|
||||||
|
|
||||||
PIString cur_server;
|
PIString cur_server;
|
||||||
PIPeer peer;
|
PIPeer peer;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void procPIEvents() {callQueuedEvents();}
|
||||||
void buildTree(QByteArray d);
|
void buildTree(QByteArray d);
|
||||||
void on_listApp_currentRowChanged(int r);
|
void on_listApp_currentRowChanged(int r);
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>923</width>
|
<width>824</width>
|
||||||
<height>661</height>
|
<height>597</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@@ -40,91 +40,155 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="">
|
<widget class="QWidget" name="layoutWidget">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="labelAppname">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
<property name="text">
|
<property name="currentIndex">
|
||||||
<string/>
|
<number>2</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<widget class="QWidget" name="tab">
|
||||||
<set>Qt::AlignCenter</set>
|
<attribute name="title">
|
||||||
</property>
|
<string>Info</string>
|
||||||
</widget>
|
</attribute>
|
||||||
</item>
|
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_2">
|
<widget class="QLabel" name="labelInfo">
|
||||||
<property name="title">
|
<property name="text">
|
||||||
<string>Containers</string>
|
<string/>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QFormLayout" name="formLayout">
|
<property name="alignment">
|
||||||
<property name="fieldGrowthPolicy">
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
||||||
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
|
</property>
|
||||||
</property>
|
</widget>
|
||||||
<property name="rowWrapPolicy">
|
</item>
|
||||||
<enum>QFormLayout::DontWrapRows</enum>
|
</layout>
|
||||||
</property>
|
</widget>
|
||||||
<property name="labelAlignment">
|
<widget class="QWidget" name="tab_2">
|
||||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
<attribute name="title">
|
||||||
</property>
|
<string>Containers</string>
|
||||||
<item row="0" column="0">
|
</attribute>
|
||||||
<widget class="QLabel" name="label">
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
<property name="text">
|
<item>
|
||||||
<string>count:</string>
|
<widget class="QTreeWidget" name="treeContainers">
|
||||||
</property>
|
<property name="editTriggers">
|
||||||
</widget>
|
<set>QAbstractItemView::NoEditTriggers</set>
|
||||||
</item>
|
</property>
|
||||||
<item row="0" column="1">
|
<property name="verticalScrollMode">
|
||||||
<widget class="QLabel" name="labelCount">
|
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>0</string>
|
<column>
|
||||||
</property>
|
<property name="text">
|
||||||
</widget>
|
<string>type</string>
|
||||||
</item>
|
</property>
|
||||||
<item row="1" column="0">
|
</column>
|
||||||
<widget class="QLabel" name="label_2">
|
<column>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>allocated:</string>
|
<string>count</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</column>
|
||||||
</item>
|
<column>
|
||||||
<item row="1" column="1">
|
<property name="text">
|
||||||
<widget class="QLabel" name="labelAlloc">
|
<string>items</string>
|
||||||
<property name="text">
|
</property>
|
||||||
<string>0</string>
|
</column>
|
||||||
</property>
|
<column>
|
||||||
</widget>
|
<property name="text">
|
||||||
</item>
|
<string>bytes_allocated</string>
|
||||||
<item row="2" column="0">
|
</property>
|
||||||
<widget class="QLabel" name="label_3">
|
</column>
|
||||||
<property name="text">
|
<column>
|
||||||
<string>used:</string>
|
<property name="text">
|
||||||
</property>
|
<string>bytes_used</string>
|
||||||
</widget>
|
</property>
|
||||||
</item>
|
</column>
|
||||||
<item row="2" column="1">
|
</widget>
|
||||||
<widget class="QLabel" name="labelUsed">
|
</item>
|
||||||
<property name="text">
|
</layout>
|
||||||
<string>0</string>
|
</widget>
|
||||||
</property>
|
<widget class="QWidget" name="tab_4">
|
||||||
</widget>
|
<attribute name="title">
|
||||||
</item>
|
<string>Objects</string>
|
||||||
</layout>
|
</attribute>
|
||||||
</widget>
|
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||||
</item>
|
<item>
|
||||||
<item>
|
<widget class="QTabWidget" name="tabWidget_2">
|
||||||
<widget class="QTreeWidget" name="tree">
|
<property name="currentIndex">
|
||||||
<property name="editTriggers">
|
<number>1</number>
|
||||||
<set>QAbstractItemView::NoEditTriggers</set>
|
</property>
|
||||||
</property>
|
<widget class="QWidget" name="tab_5">
|
||||||
<property name="verticalScrollMode">
|
<attribute name="title">
|
||||||
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
<string>List</string>
|
||||||
</property>
|
</attribute>
|
||||||
<column>
|
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||||
<property name="text">
|
<item>
|
||||||
<string/>
|
<widget class="QTreeWidget" name="treeObjects">
|
||||||
</property>
|
<property name="editTriggers">
|
||||||
</column>
|
<set>QAbstractItemView::NoEditTriggers</set>
|
||||||
|
</property>
|
||||||
|
<property name="verticalScrollMode">
|
||||||
|
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||||
|
</property>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>class</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>name</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>parents</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>queued_events</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_6">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Statictic</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeWidget" name="treeObjectsStat">
|
||||||
|
<property name="editTriggers">
|
||||||
|
<set>QAbstractItemView::NoEditTriggers</set>
|
||||||
|
</property>
|
||||||
|
<property name="verticalScrollMode">
|
||||||
|
<enum>QAbstractItemView::ScrollPerPixel</enum>
|
||||||
|
</property>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>class</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>count</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_3">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Threads</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
|||||||
Reference in New Issue
Block a user