Russian Qt Forum
Ноябрь 23, 2024, 08:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Программно добавить экземпляр виджета  (Прочитано 8955 раз)
chem79
Гость
« : Февраль 27, 2013, 16:37 »

Я новичок в Qt и может ответ на мой вопрос очевиден, но я решения не нашел.
Создал собственный виджет для дизайнера с прикрученным к нему меню. По нажатию на один из пунктов меню надо на разрабатываемую форму положить экземпляр другого виджета. Т.е. получить результат аналогичный тому, как если бы разработчик просто перетащил мышкой из панели виджетов, чтобы была возможность отредактировать свойства. Подскажите куда смотреть в доках.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Февраль 27, 2013, 16:56 »

Так а в чем проблема?
Выделяете память под новый виджет, который хотите создать и указываете куда его разместить

Пример:

h:
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>

class MainWindow : public QWidget
{
    Q_OBJECT
   
public:
    MainWindow(QWidget *parent = 0);

private:
    int count;

public slots:
    void addButton();
};

#endif // MAINWINDOW_H

cpp:
Код:
#include "mainwindow.h"

/// PUBLIC
MainWindow::MainWindow(QWidget *parent):
    QWidget(parent),
    count(0)
{
    QPushButton *pButtonAddButton = new QPushButton("Click ME!!!");
    connect(pButtonAddButton, SIGNAL(clicked()),
            this, SLOT(addButton()));

    QVBoxLayout *vBoxLayoutMain = new QVBoxLayout();

    vBoxLayoutMain->addWidget(pButtonAddButton);

    setLayout(vBoxLayoutMain);
}

/// PUBLIC SLOTS
void MainWindow::addButton()
{
    count++;

    QPushButton *pButtonNew = new QPushButton(QString::number(count));
    connect(pButtonNew, SIGNAL(clicked()),
            this, SLOT(addButton()));

    this->layout()->addWidget(pButtonNew);
}
Записан

chem79
Гость
« Ответ #2 : Март 01, 2013, 08:22 »

Так а в чем проблема?
Выделяете память под новый виджет, который хотите создать и указываете куда его разместить

Вероятно, я плохо сформулировал вопрос. То о чем Вы говорите подходит для runtime и это действительно просто. Я говорю о процессе разработки в дизайнере.
Если там сделать что-то подобное, то кнопка на форме появится, но в инспекторе объектов ее не будет и свойства соответственно отредактировать не удается.

Может так будет яснее:

« Последнее редактирование: Март 01, 2013, 08:33 от chem79 » Записан
Bepec
Гость
« Ответ #3 : Март 01, 2013, 08:37 »

Вы хотите свой виджет сделать? тогда ищите по словосочетания создание своего плагина для дизайнера/Qt Creator.
Записан
chem79
Гость
« Ответ #4 : Март 01, 2013, 08:48 »

Собственно, я свой плагин УЖЕ сделал. Но как добавить в него указанный выше функционал? Мне найти в мануалах не удалось. Плачущий
Записан
Bepec
Гость
« Ответ #5 : Март 01, 2013, 09:07 »

Недостаточно информации для выдачи верного ответа.

Если его нет в диспетчере объектов, то значит вы либо сделали плагин неправильно, либо у вас плагин каким то макаром внедряется в уже существующий объект Веселый

Но тут смутно и больше походит на бред (мой).

PS больше информации, какой плагин для чего на чём основан, желателен код и прочая.
Записан
chem79
Гость
« Ответ #6 : Март 01, 2013, 09:33 »

Собственно, функция вызывающаяся при нажатии на пункт меню.
(point - указатель на экземпляр вызвавший меню)

Код:
void SBranchPointMenu::addPoint()
{

    QPushButton *pButtonNew = new QPushButton("a!");
    QVBoxLayout *vBoxLayoutMain = new QVBoxLayout(qobject_cast<QWidget*>(point->parent()));
     vBoxLayoutMain->addWidget(pButtonNew);
}

При этом получается нередактируемая кнопка (см. скрины выше). А нужен полноценный вариант.
« Последнее редактирование: Март 01, 2013, 09:35 от chem79 » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 22.