Advertisement
eikhner

Untitled

Sep 22nd, 2019
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.47 KB | None | 0 0
  1.  
  2. #include <QtWidgets/QtWidgets>
  3. /// ранее рабочий код выглядел так
  4.  
  5. static ssize_t idaapi ui_callback(void *user_data, int notification_code, va_list va) {
  6.     if (notification_code == ui_widget_visible) {
  7.         /// <TWidget отображается на экране.Используйте это событие, чтобы заполнить окно элементами управления
  8.         TWidget *widget = va_arg(va, TWidget *);
  9.         if (widget == user_data) {
  10.             QWidget *w = (QWidget *) widget;
  11.  
  12.             // create a Layout
  13.             QLabel *swLabel1 = new QLabel("First  Label Textbox ");
  14.             QLineEdit *swTB1 = new QLineEdit();
  15.             swTB1->setFixedSize(80, 21);
  16.             QLabel *swLabel2 = new QLabel("Second  Label Textbox ");
  17.             QLineEdit *swTB2 = new QLineEdit();
  18.             swTB2->setFixedSize(80, 21);
  19.             QLabel *swLabel3 = new QLabel("Third  Label Textbox ");
  20.             QLineEdit *swTB3 = new QLineEdit();
  21.             swTB3->setFixedSize(80, 21);
  22.             QLabel *swLabel4 = new QLabel("Fourth  Label Textbox ");
  23.             QLineEdit *swTB4 = new QLineEdit();
  24.             swTB4->setFixedSize(80, 21);
  25.  
  26.             QHBoxLayout* pHLayout1 = new QHBoxLayout();
  27.             pHLayout1->setContentsMargins(10, 10, 10, 10);
  28.             pHLayout1->setSpacing(15);
  29.  
  30.             QHBoxLayout* pHLayout2 = new QHBoxLayout();
  31.             pHLayout2->setContentsMargins(10, 10, 10, 10);
  32.             pHLayout2->setSpacing(15);
  33.  
  34.             QHBoxLayout* pHLayout3 = new QHBoxLayout();
  35.             pHLayout3->setContentsMargins(10, 10, 10, 10);
  36.             pHLayout3->setSpacing(15);
  37.  
  38.             QHBoxLayout* pHLayout4 = new QHBoxLayout();
  39.             pHLayout4->setContentsMargins(10, 10, 10, 10);
  40.             pHLayout4->setSpacing(15);
  41.  
  42.             QHBoxLayout* pHLayout5 = new QHBoxLayout();
  43.             pHLayout5->setContentsMargins(10, 10, 10, 10);
  44.             pHLayout5->setSpacing(15);
  45.  
  46.             pHLayout1->addWidget(swTB1);
  47.             pHLayout1->addWidget(swLabel1);
  48.             pHLayout1->addStretch();
  49.             pHLayout2->addWidget(swTB2);
  50.             pHLayout2->addWidget(swLabel2);
  51.             pHLayout2->addStretch();
  52.             pHLayout3->addWidget(swTB3);
  53.             pHLayout3->addWidget(swLabel3);
  54.             pHLayout3->addStretch();
  55.             pHLayout4->addWidget(swTB4);
  56.             pHLayout4->addWidget(swLabel4);
  57.             pHLayout4->addStretch();
  58.  
  59.             QPushButton* pswButA = new QPushButton("Ok");
  60.             pswButA->setToolTip("Tooltip - when you hover over the button Ok");
  61.  
  62.             pHLayout5->setContentsMargins(10, 10, 100, 10);
  63.             pHLayout5->setSpacing(50);
  64.             pHLayout5->addStretch();
  65.             pHLayout5->addWidget(pswButA);
  66.  
  67.             QVBoxLayout* pVLayout = new QVBoxLayout();
  68.  
  69.             pVLayout->addLayout(pHLayout1);
  70.             pVLayout->addLayout(pHLayout2);
  71.             pVLayout->addLayout(pHLayout3);
  72.             pVLayout->addLayout(pHLayout4);
  73.             pVLayout->addLayout(pHLayout5);
  74.  
  75.             pVLayout->addStretch();
  76.             //connect the button to a slot
  77.             QObject::connect(pswButA, SIGNAL(clicked()), start_window, SLOT(clicked()));
  78.            
  79.             // finish Create Layout
  80.            
  81.             // set Layuot for parent
  82.             w->setLayout(pVLayout);
  83.  
  84.  
  85.             MyActions *start_window = new MyActions(w);
  86.  
  87.            
  88.             msg("\n\n\t\tThis plugin opens in the part of the window where the cursor is at the time of launch.");
  89.             msg("\n\n\t\t**********\tPlugin is starting.\t**********\n\n");
  90.  
  91.             //lint -e{429} actions,b not freed
  92.         }
  93.     }
  94.  
  95.  
  96.  
  97. /// myactions.h
  98. #include <QtWidgets/QtWidgets>
  99.    
  100. class MyActions : public QObject {
  101.     Q_OBJECT // макрос
  102.  
  103. public:
  104.     MyActions(QObject *_parent) : QObject(_parent) {
  105.  
  106.     }
  107.  
  108. private slots:
  109.     void clicked();
  110. }; 
  111.    
  112. /// ВОПРОС  - как вынести код наполнения формы элементами в отдельный класс  - вот этот кусок    
  113.    
  114.    
  115.             // create a Layout
  116.  
  117.                 его я вынес в отдельный класс и это не работает
  118.                 во первых  - ничего не отображается
  119.                 а после закрытия окна сообщение о нарушении прав доступа к адресу
  120.                 типа такого
  121.             ********************************************************************************************** 
  122.                 Вызвано исключение по адресу 0x0000000066CE9F92 (Qt5Core.dll) в ida64.exe: 0xC0000005:
  123.                 нарушение прав доступа при чтении по адресу 0x000007FECBD7EF58.
  124.             **********************************************************************************************
  125.            
  126.             // finish Create Layout
  127.    
  128.    
  129.    
  130. Я сделал так
  131.  
  132. добавил класс Layout
  133.  
  134.         layout.h  **********************************************************************
  135.            
  136.             #pragma once
  137.  
  138.             #include "all_include.h"
  139.  
  140.             class Layout : public QObject {
  141.  
  142.             public:
  143.                 Layout(QWidget* w);
  144.  
  145.                 Layout& CreateLayout();
  146.  
  147.                 Layout& AddBox( QVBoxLayout* pColBox);
  148.  
  149.                 Layout& AddButtonBox(QVBoxLayout* pColBox);
  150.  
  151.                 QPushButton* GetPswButA() const;
  152.             private:
  153.                 QWidget* _w;
  154.                 QPushButton* _pushButton;
  155.             }; 
  156.  
  157.         layout.cpp  ***********************************************************************
  158.        
  159.        
  160.             #include "layout.h"
  161.  
  162.             Layout::Layout(QWidget *w) : QObject(w) {
  163.                 _w = w;
  164.             }
  165.  
  166.             Layout& Layout::CreateLayout() {
  167.                 // create V container
  168.                 QVBoxLayout* pColBox = new QVBoxLayout();
  169.                 // add H containers in V container
  170.                 AddBox(pColBox);
  171.                 // add H containers with button  in V container
  172.                 AddButtonBox(pColBox);
  173.  
  174.                 pColBox->addStretch();
  175.  
  176.                 _w->setLayout(pColBox);
  177.  
  178.                 return *this;
  179.             }
  180.  
  181.             Layout& Layout::AddBox( QVBoxLayout* pColBox) {
  182.                 QLabel *swLabel1 = new QLabel("First  Label Textbox ");
  183.                 QLineEdit *swTB1 = new QLineEdit();
  184.                 swTB1->setFixedSize(80, 21);
  185.                 QLabel *swLabel2 = new QLabel("Second  Label Textbox ");
  186.                 QLineEdit *swTB2 = new QLineEdit();
  187.                 swTB2->setFixedSize(80, 21);
  188.                 QLabel *swLabel3 = new QLabel("Third  Label Textbox ");
  189.                 QLineEdit *swTB3 = new QLineEdit();
  190.                 swTB3->setFixedSize(80, 21);
  191.                 QLabel *swLabel4 = new QLabel("Fourth  Label Textbox ");
  192.                 QLineEdit *swTB4 = new QLineEdit();
  193.                 swTB4->setFixedSize(80, 21);
  194.  
  195.                 QHBoxLayout* pRowBox1 = new QHBoxLayout();
  196.                 pRowBox1->setContentsMargins(10, 10, 10, 10);
  197.                 pRowBox1->setSpacing(15);
  198.  
  199.                 QHBoxLayout* pRowBox2 = new QHBoxLayout();
  200.                 pRowBox2->setContentsMargins(10, 10, 10, 10);
  201.                 pRowBox2->setSpacing(15);
  202.  
  203.                 QHBoxLayout* pRowBox3 = new QHBoxLayout();
  204.                 pRowBox3->setContentsMargins(10, 10, 10, 10);
  205.                 pRowBox3->setSpacing(15);
  206.  
  207.                 QHBoxLayout* pRowBox4 = new QHBoxLayout();
  208.                 pRowBox4->setContentsMargins(10, 10, 10, 10);
  209.                 pRowBox4->setSpacing(15);
  210.  
  211.                 pColBox->addLayout(pRowBox1);
  212.                 pColBox->addLayout(pRowBox2);
  213.                 pColBox->addLayout(pRowBox3);
  214.                 pColBox->addLayout(pRowBox4);
  215.  
  216.                 return *this;
  217.             }
  218.  
  219.             Layout& Layout::AddButtonBox(QVBoxLayout* pColBox) {
  220.                 QHBoxLayout* pRowBox = new QHBoxLayout();
  221.                 pRowBox->setContentsMargins(10, 10, 100, 10);
  222.                 pRowBox->setSpacing(50);
  223.                 pRowBox->addStretch();
  224.  
  225.                 _pushButton = new QPushButton("Ok");
  226.                 _pushButton->setToolTip("Tooltip - when you hover over the button Ok");
  227.  
  228.                 pRowBox->addWidget(_pushButton);
  229.  
  230.                 return *this;
  231.             }
  232.  
  233.             QPushButton* Layout::GetPswButA() const {
  234.                 return _pushButton;
  235.             }
  236.    
  237.    
  238.    
  239.         all_include.h **********************************************************************************   
  240.    
  241.             /*
  242.             * Файл со всеми инклудами
  243.             * достаточно добавить необходимый инклуд сюда
  244.             * собственные cpp и h фаилы сюда добавлять не надо
  245.             * собственные  h фаилы добавлять в маин
  246.             */
  247.  
  248.             #pragma once
  249.             #include <QtWidgets/QtWidgets>
  250.             #include <QtCore/QtCore>
  251.  
  252.             #include <ida.hpp>
  253.             #include <idp.hpp>
  254.             #include <loader.hpp>
  255.             #include <kernwin.hpp> 
  256.                
  257.    
  258.    
  259.     // в маин делаю так
  260.    
  261.    
  262.    
  263. static ssize_t idaapi ui_callback(void *user_data, int notification_code, va_list va) {
  264.     if (notification_code == ui_widget_visible) {
  265.         /// <TWidget отображается на экране.Используйте это событие, чтобы заполнить окно элементами управления
  266.         TWidget *widget = va_arg(va, TWidget *);
  267.         if (widget == user_data) {
  268.             QWidget *w = (QWidget *) widget;
  269.  
  270.             Layout layout(w);
  271.             loyaut.CreateLayout();
  272.  
  273.  
  274.             MyActions *start_window = new MyActions(w);
  275.  
  276.            
  277.             msg("\n\n\t\tThis plugin opens in the part of the window where the cursor is at the time of launch.");
  278.             msg("\n\n\t\t**********\tPlugin is starting.\t**********\n\n");
  279.  
  280.             //lint -e{429} actions,b not freed
  281.         }
  282.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement