crossplatform.ru

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

6 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Создание неограниченного количества элементов
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 в каждую ячейку таблицы, пусть даже при условии что картинка на нем будет одна и та же.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.7.2010, 20:24
Сообщение #2


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

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

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




Репутация:   94  


RazrFalcon, в этой ситуации я всем рекомендую смотреть пример "Calculator" (examples\widgets\calculator)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 2.7.2010, 21:31
Сообщение #3


Zombie Mod
*****

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

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




Репутация:   212  


Цитата(Litkevich Yuriy @ 2.7.2010, 20:24) *
рекомендую смотреть пример "Calculator" (examples\widgets\calculator)

Что то не очень проясняется... разве что кроме
     for (int i = 0; i < NumDigitButtons; ++i) {
         digitButtons[i] = createButton(QString::number(i), SLOT(digitClicked()));
     }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.7.2010, 23:44
Сообщение #4


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

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

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




Репутация:   94  


тепло, теперь разберись, как определяется, какую кнопку нажали.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 9.7.2010, 3:30
Сообщение #5





Гости








    


Пришол из этой темы
Вот собственно код, что здесь не так?.
Жалуется, что конструктор у QPushButton private

main.cpp
CODE
#include "text_button.h"

int main(int argc, char **argv)
{
QApplication app(argc,argv);
QWidget wgt;
text_button *buttonNew = new text_button;

QPushButton *mainbtn = new QPushButton("Add Button");

QVBoxLayout *vbl = new QVBoxLayout();
vbl->addWidget(mainbtn);
wgt.setLayout(vbl);

/* Добавить класс для создания поля и кнопки */

QPushButton btn = buttonNew->NewButton();
//vbl->addWidget(btn);

wgt.show();
/*
QObject::connect(&mainbtn, SIGNAL(clicked()),
&buttonNew, SLOT(NewButton())
);
*/
return app.exec();
}


text_button.h
CODE
#ifndef TEXT_BUTTON_H
#define TEXT_BUTTON_H

#include <QObject>
#include <QtGui>
class text_button : public QObject
{
Q_OBJECT
public:
explicit text_button(QObject *parent = 0);
QPushButton NewButton();
signals:

public slots:
void clickMainBtn();

};

#endif // TEXT_BUTTON_H


text_button.cpp
CODE
#include "text_button.h"


text_button::text_button(QObject *parent) :
QObject(parent)
{
/*Все объекты должны создаваться в конструкторе */
}
QPushButton text_button::NewButton()
{
QPushButton *btn1 = new QPushButton("new");
//wgt->addWidget(btn1);
//cout << btn1 << endl;
return btn1;
}
void text_button::clickMainBtn()
{
//emit NewButton();
}


Я понимаю, что неплохо было бы передать виджет в класс как родитель, но дело не в правильности кода, а в понимании..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
haiflive
  опции профиля:
сообщение 9.7.2010, 4:11
Сообщение #6


Студент
*

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

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




Репутация:   0  


Всё вопрос снят, разобрался..
Чуть позже выложу рабочий пример.. авось кому пригодится..
Будь они не ладны эти указатели..
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.7.2010, 6:34
Сообщение #7


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

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

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




Репутация:   94  


haiflive, в Qt у всех наследников QObject конструктор копирования и оператор присваивания находятся в закрытой (private) области. Т.к. операции копирования таких объектов не тривиальные. Поэтому всюду в программах Qt используется динамическое создание объектов-наследников QObject. Ну и соответственно работать с такими объектами нужно через указатель.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
haiflive
  опции профиля:
сообщение 9.7.2010, 15:14
Сообщение #8


Студент
*

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

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




Репутация:   0  


Как-то в голове не укладывается, что вопрос решился обёрткой на базовый QT класс..

Тоесть, всё что нужно было, это создать новый класс отнаследованый от требуемого объекта(в данном случае QPushButton), и конструктор нового класса объявить как public?.
И всё работает.. :huh: или всётаки могут быть какие-то проблемы?.

#ifndef BUTTON_H
#define BUTTON_H

#include <QToolButton>

class Button : public QPushButton
{
     Q_OBJECT

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

     QSize sizeHint() const;
};

#endif
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 10.7.2010, 6:19
Сообщение #9


фрилансер
******

Группа: Участник
Сообщений: 2928
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


ИМХО, лучше так
#pragma once
#include <QToolButton>

class Button
{
     QPushButton* m_pButton;

public:
     Button(/*...параметры...*/)
     {
         m_pButton=new QPushButton(/*...параметры...*/);
     }

     ~Button()
     {
         if(m_pButton)delete m_pButton;
     }

     operator QPushButton()
     {
         return *m_pButton;
     }

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

     QSize sizeHint() const;

    QPushButton& GetQPushButton()
    {
        return *m_pButton;
    }
};



а ещё лучше - массив указателей и не париться по ерунде )

Сообщение отредактировал Алексей1153 - 13.7.2010, 18:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 10.7.2010, 11:03
Сообщение #10


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

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

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




Репутация:   94  


Как-то всё очень сложно, пример "Калькулятор" явно не был изучен
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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