crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Динамически создавать объекты, и и как на них повесить сигналы?
FenixTES
  опции профиля:
сообщение 17.11.2009, 10:31
Сообщение #1


Студент
*

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

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




Репутация:   0  


предположим, у меня есть число, мне нужно создать несколько кнопок(кол-во кнопок == числу), и потом повесить на них сигналы.
долго с этим долбался, что только не пробывал, создавал и массивы кнопок, и пробывал через QMap...
ниче только не получилось...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Elfinit
  опции профиля:
сообщение 17.11.2009, 11:05
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 127
Регистрация: 17.3.2009
Из: Казань
Пользователь №: 619

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




Репутация:   1  


for (int i=0;i<num;i++) {
  QPushButton *btn = new QPushButton(parent);
  connect(btn, SIGNAL(clicked()), ......)
  ....тут же - вставка в layout .......
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.11.2009, 13:00
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9632
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


FenixTES, также смотри пример Калькулятор:
%QTDIR%\examples\widgets\calculator\calculator.cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 17.11.2009, 22:01
Сообщение #4


Участник
**

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

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




Репутация:   0  


QSignalMapper
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FenixTES
  опции профиля:
сообщение 18.11.2009, 16:52
Сообщение #5


Студент
*

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

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




Репутация:   0  


Цитата(niXman @ 17.11.2009, 22:01) *
QSignalMapper

угу, сигналы да
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eriser
  опции профиля:
сообщение 6.1.2011, 15:13
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 6.1.2011
Пользователь №: 2328

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




Репутация:   0  


Мне нужно динамически создать группу объектов (2 кнопки и метка на каком нибудь лейауте (не важно)). То-есть допустим при каждом нажатии на кнопку в griglayout добавляется рамка, в ней две кнопки и метка со своими параметрами. С одной кнопкой всё получается, а как собрать всё это в конструкторе не могу понять. В Делфи с этим проблем не было, а с Qt и c++ в целом - только начинаю изучать. В принципе всё похоже, но в этом пе получается провести аналогию.
Заранее спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 6.1.2011, 19:53
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9632
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


eriser, ничего не понял из твоего описания.
Цитата(eriser @ 6.1.2011, 17:13) *
То-есть допустим при каждом нажатии на кнопку в griglayout добавляется рамка, в ней две кнопки и метка со своими параметрами.
один раз нажали, что получилось? Второй раз нажали, что получилось? По какому принципу в griglayout помещаются новые объекты, построчно?
Нарисуй эскиз.

Цитата(eriser @ 6.1.2011, 17:13) *
одной кнопкой всё получается, а как собрать всё это в конструкторе не могу понять.
приведи код с одной кнопкой. О каком конструкторе речь, о конструкторе класса?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eriser
  опции профиля:
сообщение 7.1.2011, 0:02
Сообщение #8


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 6.1.2011
Пользователь №: 2328

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




Репутация:   0  


При каждом нажатии на кнопку из файла считывается строка или несколько строк.
Динамически создаётся массив из экземпляров моего класса (1 по 6 или 12 штук) и располагается на форме в каком-то порядке. Каждый экземпляр содержит label(сюда передаётся считанная строка) и 2 кнопки Да и Нет. Каждый этот объект со своим идентификатором, а кнопками фиксируется ответ пользователя в таблице статистики.
Пытался создать класс на основе label. В конструкторе класса
1.создаю две кнопки
2. одну метку
3. layout
4. кнопки и метку добавляю в layout
5. на фрейм устанавливаю layout

На форме программы ничего не появляется. Но если в конструкторе добавляю show, тогда то что я задумал появляется, но в новом окне.

virtbox.h
#include <QLabel>

class ButtonOnLabel : public QLabel
{
    Q_OBJECT

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

virtbox.cpp
#include <QtGui>
#include "virtbox.h"

ButtonOnLabel::ButtonOnLabel(const QString &text, QWidget *parent)    : QLabel(parent)


{
setGeometry (0,0,100,100);
    QFrame *lab =new QFrame;
    QPushButton *noBut = new QPushButton();
    QPushButton *yesBut =new QPushButton();
    QFormLayout *lay=new QFormLayout( );

yesBut->setText ("yes");
noBut->setText ("no");
lay->addWidget (lab);
lay->addWidget (yesBut);
lay->addWidget (noBut);

ButtonOnLabel::setText ("'это я вижу");
lab->setLayout (lay); // а тут ничего нет! Добавив lab->show(); создаются новые окна, а нужно размещать на одном gridlayoute

}

widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "virtbox.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
QString text;

  ButtonOnLabel *OnLabel = new ButtonOnLabel(text);
  ui->formLayout->addWidget (OnLabel);
}


судя по тому, что не получается что-то не так...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.1.2011, 0:17
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9632
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Т.к. функциональность
Цитата(eriser @ 7.1.2011, 2:02) *
Но если в конструкторе добавляю show, тогда то что я задумал появляется, но в новом окне.
метод этот нужно вызывать после создания объекта, когда родитель (у тебя Widget) уже создан:
void Widget::on_pushButton_clicked()
{
QString text;

  ButtonOnLabel *OnLabel = new ButtonOnLabel(text);
  ui->formLayout->addWidget (OnLabel);
  OnLabel->show(); // <-- после того как поместишь в компоновщик
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
eriser
  опции профиля:
сообщение 7.1.2011, 11:03
Сообщение #10


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 6.1.2011
Пользователь №: 2328

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




Репутация:   0  


Спасибо, что помогаете! Пробовал, не выходит ничего. Дело в том что ButtonOnLabel::setText ("'это я вижу"); создаются, а кнопок нет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 18.12.2017, 21:28