Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <QtWidgets/QtWidgets>
- /// ранее рабочий код выглядел так
- static ssize_t idaapi ui_callback(void *user_data, int notification_code, va_list va) {
- if (notification_code == ui_widget_visible) {
- /// <TWidget отображается на экране.Используйте это событие, чтобы заполнить окно элементами управления
- TWidget *widget = va_arg(va, TWidget *);
- if (widget == user_data) {
- QWidget *w = (QWidget *) widget;
- // create a Layout
- QLabel *swLabel1 = new QLabel("First Label Textbox ");
- QLineEdit *swTB1 = new QLineEdit();
- swTB1->setFixedSize(80, 21);
- QLabel *swLabel2 = new QLabel("Second Label Textbox ");
- QLineEdit *swTB2 = new QLineEdit();
- swTB2->setFixedSize(80, 21);
- QLabel *swLabel3 = new QLabel("Third Label Textbox ");
- QLineEdit *swTB3 = new QLineEdit();
- swTB3->setFixedSize(80, 21);
- QLabel *swLabel4 = new QLabel("Fourth Label Textbox ");
- QLineEdit *swTB4 = new QLineEdit();
- swTB4->setFixedSize(80, 21);
- QHBoxLayout* pHLayout1 = new QHBoxLayout();
- pHLayout1->setContentsMargins(10, 10, 10, 10);
- pHLayout1->setSpacing(15);
- QHBoxLayout* pHLayout2 = new QHBoxLayout();
- pHLayout2->setContentsMargins(10, 10, 10, 10);
- pHLayout2->setSpacing(15);
- QHBoxLayout* pHLayout3 = new QHBoxLayout();
- pHLayout3->setContentsMargins(10, 10, 10, 10);
- pHLayout3->setSpacing(15);
- QHBoxLayout* pHLayout4 = new QHBoxLayout();
- pHLayout4->setContentsMargins(10, 10, 10, 10);
- pHLayout4->setSpacing(15);
- QHBoxLayout* pHLayout5 = new QHBoxLayout();
- pHLayout5->setContentsMargins(10, 10, 10, 10);
- pHLayout5->setSpacing(15);
- pHLayout1->addWidget(swTB1);
- pHLayout1->addWidget(swLabel1);
- pHLayout1->addStretch();
- pHLayout2->addWidget(swTB2);
- pHLayout2->addWidget(swLabel2);
- pHLayout2->addStretch();
- pHLayout3->addWidget(swTB3);
- pHLayout3->addWidget(swLabel3);
- pHLayout3->addStretch();
- pHLayout4->addWidget(swTB4);
- pHLayout4->addWidget(swLabel4);
- pHLayout4->addStretch();
- QPushButton* pswButA = new QPushButton("Ok");
- pswButA->setToolTip("Tooltip - when you hover over the button Ok");
- pHLayout5->setContentsMargins(10, 10, 100, 10);
- pHLayout5->setSpacing(50);
- pHLayout5->addStretch();
- pHLayout5->addWidget(pswButA);
- QVBoxLayout* pVLayout = new QVBoxLayout();
- pVLayout->addLayout(pHLayout1);
- pVLayout->addLayout(pHLayout2);
- pVLayout->addLayout(pHLayout3);
- pVLayout->addLayout(pHLayout4);
- pVLayout->addLayout(pHLayout5);
- pVLayout->addStretch();
- //connect the button to a slot
- QObject::connect(pswButA, SIGNAL(clicked()), start_window, SLOT(clicked()));
- // finish Create Layout
- // set Layuot for parent
- w->setLayout(pVLayout);
- MyActions *start_window = new MyActions(w);
- msg("\n\n\t\tThis plugin opens in the part of the window where the cursor is at the time of launch.");
- msg("\n\n\t\t**********\tPlugin is starting.\t**********\n\n");
- //lint -e{429} actions,b not freed
- }
- }
- /// myactions.h
- #include <QtWidgets/QtWidgets>
- class MyActions : public QObject {
- Q_OBJECT // макрос
- public:
- MyActions(QObject *_parent) : QObject(_parent) {
- }
- private slots:
- void clicked();
- };
- /// ВОПРОС - как вынести код наполнения формы элементами в отдельный класс - вот этот кусок
- // create a Layout
- его я вынес в отдельный класс и это не работает
- во первых - ничего не отображается
- а после закрытия окна сообщение о нарушении прав доступа к адресу
- типа такого
- **********************************************************************************************
- Вызвано исключение по адресу 0x0000000066CE9F92 (Qt5Core.dll) в ida64.exe: 0xC0000005:
- нарушение прав доступа при чтении по адресу 0x000007FECBD7EF58.
- **********************************************************************************************
- // finish Create Layout
- Я сделал так
- добавил класс Layout
- layout.h **********************************************************************
- #pragma once
- #include "all_include.h"
- class Layout : public QObject {
- public:
- Layout(QWidget* w);
- Layout& CreateLayout();
- Layout& AddBox( QVBoxLayout* pColBox);
- Layout& AddButtonBox(QVBoxLayout* pColBox);
- QPushButton* GetPswButA() const;
- private:
- QWidget* _w;
- QPushButton* _pushButton;
- };
- layout.cpp ***********************************************************************
- #include "layout.h"
- Layout::Layout(QWidget *w) : QObject(w) {
- _w = w;
- }
- Layout& Layout::CreateLayout() {
- // create V container
- QVBoxLayout* pColBox = new QVBoxLayout();
- // add H containers in V container
- AddBox(pColBox);
- // add H containers with button in V container
- AddButtonBox(pColBox);
- pColBox->addStretch();
- _w->setLayout(pColBox);
- return *this;
- }
- Layout& Layout::AddBox( QVBoxLayout* pColBox) {
- QLabel *swLabel1 = new QLabel("First Label Textbox ");
- QLineEdit *swTB1 = new QLineEdit();
- swTB1->setFixedSize(80, 21);
- QLabel *swLabel2 = new QLabel("Second Label Textbox ");
- QLineEdit *swTB2 = new QLineEdit();
- swTB2->setFixedSize(80, 21);
- QLabel *swLabel3 = new QLabel("Third Label Textbox ");
- QLineEdit *swTB3 = new QLineEdit();
- swTB3->setFixedSize(80, 21);
- QLabel *swLabel4 = new QLabel("Fourth Label Textbox ");
- QLineEdit *swTB4 = new QLineEdit();
- swTB4->setFixedSize(80, 21);
- QHBoxLayout* pRowBox1 = new QHBoxLayout();
- pRowBox1->setContentsMargins(10, 10, 10, 10);
- pRowBox1->setSpacing(15);
- QHBoxLayout* pRowBox2 = new QHBoxLayout();
- pRowBox2->setContentsMargins(10, 10, 10, 10);
- pRowBox2->setSpacing(15);
- QHBoxLayout* pRowBox3 = new QHBoxLayout();
- pRowBox3->setContentsMargins(10, 10, 10, 10);
- pRowBox3->setSpacing(15);
- QHBoxLayout* pRowBox4 = new QHBoxLayout();
- pRowBox4->setContentsMargins(10, 10, 10, 10);
- pRowBox4->setSpacing(15);
- pColBox->addLayout(pRowBox1);
- pColBox->addLayout(pRowBox2);
- pColBox->addLayout(pRowBox3);
- pColBox->addLayout(pRowBox4);
- return *this;
- }
- Layout& Layout::AddButtonBox(QVBoxLayout* pColBox) {
- QHBoxLayout* pRowBox = new QHBoxLayout();
- pRowBox->setContentsMargins(10, 10, 100, 10);
- pRowBox->setSpacing(50);
- pRowBox->addStretch();
- _pushButton = new QPushButton("Ok");
- _pushButton->setToolTip("Tooltip - when you hover over the button Ok");
- pRowBox->addWidget(_pushButton);
- return *this;
- }
- QPushButton* Layout::GetPswButA() const {
- return _pushButton;
- }
- all_include.h **********************************************************************************
- /*
- * Файл со всеми инклудами
- * достаточно добавить необходимый инклуд сюда
- * собственные cpp и h фаилы сюда добавлять не надо
- * собственные h фаилы добавлять в маин
- */
- #pragma once
- #include <QtWidgets/QtWidgets>
- #include <QtCore/QtCore>
- #include <ida.hpp>
- #include <idp.hpp>
- #include <loader.hpp>
- #include <kernwin.hpp>
- // в маин делаю так
- static ssize_t idaapi ui_callback(void *user_data, int notification_code, va_list va) {
- if (notification_code == ui_widget_visible) {
- /// <TWidget отображается на экране.Используйте это событие, чтобы заполнить окно элементами управления
- TWidget *widget = va_arg(va, TWidget *);
- if (widget == user_data) {
- QWidget *w = (QWidget *) widget;
- Layout layout(w);
- loyaut.CreateLayout();
- MyActions *start_window = new MyActions(w);
- msg("\n\n\t\tThis plugin opens in the part of the window where the cursor is at the time of launch.");
- msg("\n\n\t\t**********\tPlugin is starting.\t**********\n\n");
- //lint -e{429} actions,b not freed
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement