crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Создание неограниченного количества элементов
RazrFalcon
  опции профиля:
сообщение 2.7.2010, 19:31
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


К примеру по нажатии кнопки рядом появляется еще одна кнопка.
Как это реализовать, так как надо каждый раз давать имя новому элементу(кнопке).
pushButton_1->...
pushButton_2->...
pushButton_3->...
...
pushButton_n->...
PS желательно чтоб действие по нажатии главной кнопки передавалось и остальным (если нажму 50-ю кнопку тоже появится еще одна)
PSS ну или к примеру вставить QgraphicsView в каждую ячейку таблицы, пусть даже при условии что картинка на нем будет одна и та же.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
haiflive
  опции профиля:
сообщение 19.7.2010, 15:41
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 8.7.2010
Пользователь №: 1868

Спасибо сказали: 1 раз(а)




Репутация:   0  


Ну вот наконец-то я осилил пример с кнопкой..
Создаётся кнопка при нажатии на которую создаётся аналогичная(++N), и так до бесконечности..
и представляю код на ваш суд..

button.h
#ifndef BUTTON_H
#define BUTTON_H

#include <QToolButton>

class Button : public QToolButton
{
     Q_OBJECT

public:
     Button(const QString &text, QWidget *parent = 0);

     QSize sizeHint() const;
};

#endif

button.cpp
#include <QtGui>

#include "button.h"

Button::Button(const QString &text, QWidget *parent)
     : QToolButton(parent)
{
     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
     setText(text);
}

QSize Button::sizeHint() const
{
     QSize size = QToolButton::sizeHint();
     size.rheight() += 20;
     size.rwidth() = qMax(size.width(), size.height());
     return size;
}

text_button.h
#ifndef TEXT_BUTTON_H
#define TEXT_BUTTON_H

#include <iostream>
#include <QObject>
#include <QtGui>
/*
* можно не использовать класс "button.h" и писать вместо
* Button *button = new Button("new"+QString::number(Schet));
* QToolButton *button = new QToolButton("new"+QString::number(Schet));
* но так удобнее
*/
#include "button.h"
class text_button : public QObject
{
    Q_OBJECT
    /* Здесь будут храниться все указатели на кнопки */
    QMap<int,Button*> mapNewButtons;
    int Schet; /* счётчик кнопок */
public:
    explicit text_button(QObject *parent = 0);
    Button *NewButton();
    void MAddButton();
signals:

public slots:
    void clickMainBtn();

};

#endif // TEXT_BUTTON_H

text_button.cpp
#include "text_button.h"

text_button::text_button(QObject *parent) :
    QObject(parent), Schet(0)
{

}
Button *text_button::NewButton()
{
    Button *button = new Button("new"+QString::number(Schet));
/* Можно обработать кнопку сразу при создании */
/*
    QObject::connect(button, SIGNAL(clicked()),
                     this, SLOT(clickMainBtn())
                     );
*/
    qDebug() << SLOT(clickMainBtn());
    return button;
}
void text_button::MAddButton()
{
    /* Конечно можно было всё это сделать внутри функции NewButton(),
    * но цель была показать как работать между классами
    * имеено поэтому понадобился контейнерс с указателями */
    mapNewButtons[++Schet] = NewButton();
    mapNewButtons[Schet]->show();
    /* Прикручиваем сигнал "создать новую кнопку"
    * к только что созданной кнопке */
    QObject::connect(mapNewButtons[Schet], SIGNAL(clicked()),
                     this, SLOT(clickMainBtn())
                     );
}

void text_button::clickMainBtn()
{
    emit MAddButton();
}

main.cpp
#include "text_button.h"

int main(int argc, char **argv)
{
    QApplication app(argc,argv);
    QWidget wgt;
    /* Первая кнопка */
    QPushButton mainbtn("Add new Button");
    QVBoxLayout vbl;

    text_button buttonNew; /* Класс дл создания N кнопок */

    vbl.addWidget(&mainbtn);
    wgt.setLayout(&vbl);
    /* Здесь мы просто создаём новую кнопку используя наш класс */
    Button *btn = buttonNew.NewButton();
    /* аналогично можно работать с новой кнопкой */
    vbl.addWidget(btn);

    wgt.show();
    /* Создаём для певой главной кнопки сигнал
    * "создать новую кнопку" используя наш класс */
    QObject::connect(&mainbtn, SIGNAL(clicked()),
                     &buttonNew, SLOT(clickMainBtn())
                     );

     return app.exec();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- RazrFalcon   Создание неограниченного количества элементов   2.7.2010, 19:31
- - Litkevich Yuriy   RazrFalcon, в этой ситуации я всем рекомендую смот...   2.7.2010, 20:24
|- - RazrFalcon   Цитата(Litkevich Yuriy @ 2.7.2010, 20:24)...   2.7.2010, 21:31
- - Litkevich Yuriy   тепло, теперь разберись, как определяется, какую к...   2.7.2010, 23:44
- - Гость   Пришол из этой темы Вот собственно код, что здесь ...   9.7.2010, 3:30
- - haiflive   Всё вопрос снят, разобрался.. Чуть позже выложу ра...   9.7.2010, 4:11
- - Litkevich Yuriy   haiflive, в Qt у всех наследников QObject конструк...   9.7.2010, 6:34
- - haiflive   Как-то в голове не укладывается, что вопрос решилс...   9.7.2010, 15:14
- - Алексей1153   ИМХО, лучше так #pragma once #include <QToolB...   10.7.2010, 6:19
- - Litkevich Yuriy   Как-то всё очень сложно, пример "Калькулятор...   10.7.2010, 11:03
- - haiflive   А деструктор зачем?. Разве MOC не берёт на себя уд...   13.7.2010, 6:05
- - Litkevich Yuriy   Цитата(haiflive @ 13.7.2010, 10:05) Разве...   13.7.2010, 12:01
- - haiflive   Цитата(Litkevich Yuriy @ 13.7.2010, 20:01...   13.7.2010, 14:48
- - Litkevich Yuriy   Цитата(haiflive @ 13.7.2010, 18:48) то де...   13.7.2010, 16:33
- - Алексей1153   Цитата(haiflive @ 13.7.2010, 9:05) А дест...   13.7.2010, 18:43
- - MoPDoBoPoT   Цитата(Алексей1153 @ 13.7.2010, 19:43) Ви...   14.7.2010, 10:07
- - Алексей1153   Ну вот, значит в классе дописать слот и связать в ...   14.7.2010, 14:06
- - RazrFalcon   Ого как тема разрасталась пока я забросил эту зате...   15.7.2010, 15:18
- - haiflive   Ну вот наконец-то я осилил пример с кнопкой.. Созд...   19.7.2010, 15:41
- - Litkevich Yuriy   тему разделил: Философия о Qt, STL и pragma   20.7.2010, 15:46
- - RazrFalcon   Опять не известно количество элементов. 1) Человек...   12.8.2010, 20:07
- - Litkevich Yuriy   Цитата(RazrFalcon @ 13.8.2010, 0:07) 1) Ч...   12.8.2010, 20:26
- - RazrFalcon   Litkevich Yuriy, что то типа множества слоев, ака ...   12.8.2010, 20:51
- - Litkevich Yuriy   RazrFalcon, ты опять про внутренности. Как человек...   12.8.2010, 21:02
- - RazrFalcon   Бээ... пользователь ввел число 10. Появилось 10 qg...   12.8.2010, 21:15
|- - BRE   Цитата(RazrFalcon @ 12.8.2010, 22:15) PSS...   12.8.2010, 21:19
- - Litkevich Yuriy   Цитата(RazrFalcon @ 13.8.2010, 1:15) Пото...   12.8.2010, 21:49
- - RazrFalcon   BRE, спасибо, то что нужно, как оказалось. QList...   12.8.2010, 22:10
- - Алексей1153   Цитата(RazrFalcon @ 13.8.2010, 1:10) QGra...   12.8.2010, 22:14
- - Litkevich Yuriy   Цитата(RazrFalcon @ 13.8.2010, 2:10) а ес...   12.8.2010, 22:19
- - RazrFalcon   Алексей1153, что значит показать, у меня обычно о...   12.8.2010, 22:28
- - Алексей1153   RazrFalcon, ну, предположим, он видим. Но ты указа...   12.8.2010, 22:43
- - RazrFalcon   Алексей1153, спасибо за идею попробую ограничится ...   12.8.2010, 23:14
- - Алексей1153   RazrFalcon, ещё два момента: 1) поскольку QList...   13.8.2010, 6:45
|- - BRE   Алексей1153, для чего столько всего в деструкторе?...   13.8.2010, 7:59
- - Алексей1153   BRE, проверка if(m_p) здесь обязательна: смотри ра...   13.8.2010, 8:05
|- - BRE   Цитата(Алексей1153 @ 13.8.2010, 9:05) BRE...   13.8.2010, 8:07
- - Алексей1153   Цитата(BRE @ 13.8.2010, 11:07) перед dele...   13.8.2010, 8:11
|- - BRE   Цитата(Алексей1153 @ 13.8.2010, 9:11) име...   13.8.2010, 8:16
- - Алексей1153   Хорошо, пусть будет так: ~s_VectorPtr() ...   13.8.2010, 8:20
- - BRE   Алексей1153, я вовсе не занудствую. Ты предлагаеш...   13.8.2010, 8:27
- - Алексей1153   BRE, дык, я ж ничего. У всех свой стиль, он прочит...   13.8.2010, 8:34
- - DEADHUNT   Цитата(Алексей1153 @ 13.8.2010, 7:45) Не ...   13.8.2010, 10:25
- - Алексей1153   DEADHUNT, я вообще про C++ речь веду. А где, кстат...   13.8.2010, 10:39
- - DEADHUNT   Цитата(Алексей1153 @ 13.8.2010, 11:39) А ...   13.8.2010, 14:00
- - Litkevich Yuriy   Цитата(Алексей1153 @ 13.8.2010, 12:05) см...   13.8.2010, 15:53
- - Алексей1153   а где сей стандарт глядеть? А насчёт корректности...   13.8.2010, 16:08
- - DEADHUNT   http://open-std.org/JTC1/SC22/WG21/docs/pa.../2010...   13.8.2010, 16:47
- - Litkevich Yuriy   DEADHUNT, не мог бы ты пояснить такую строчку: Цит...   13.8.2010, 17:33
- - Алексей1153   Синтаксис я тоже не понял что означает "= de...   13.8.2010, 17:54
- - DEADHUNT   Цитата(DEADHUNT @ 13.8.2010, 17:47) Синта...   13.8.2010, 19:27
- - Алексей1153   понятно то есть мне нужно добавить s_VectorPtr...   13.8.2010, 20:26
- - DEADHUNT   Цитата(Алексей1153 @ 13.8.2010, 21:26) то...   13.8.2010, 20:38
- - Алексей1153   DEADHUNT, так так, тут вот поподробнее. Почему ра...   13.8.2010, 20:49
- - DEADHUNT   получается так: X<T> b = ...; X<T...   13.8.2010, 20:57
- - Алексей1153   Я не собирался отдельно объявлять переменные класс...   13.8.2010, 21:07


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 18.2.2025, 20:49