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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кнопки создаваемые в отдельном классе  (Прочитано 3216 раз)
yesrus
Гость
« : Ноябрь 14, 2009, 13:44 »

Вобщем проблема в следующем- к примеру по дефолту из QDialog или любого другого создаются кнопки так(fbutton наследник qpushbutton с некоторыми добавлениями):
Код
C++ (Qt)
fbutton *a1 = new fbutton("Knopka", this);
где с помощью this мы указываем, что оно показывается в данном окне. Вопрос в следующем-как создавать кнопку и что писать вместо this если кнопка создается из другого класса ?

т.е. есть класс Myclass к примеру и в нем создаются кнопки
Код
C++ (Qt)
fbutton *a1 = new fbutton("Knopka1", this);
fbutton *a2 = new fbutton("Knopka2", this);
Далее мы создаем в основном окне сам класc-
Код
C++ (Qt)
Myclass test;
В итоге кнопки создаются в отдельном окне. Вопрос в том, как сделать так, чтобы они создавались в основном окне (ну и + как этим кнопкам внутри класса передать где именно они должны создаваться (координаты)?
Записан
BRE
Гость
« Ответ #1 : Ноябрь 14, 2009, 13:48 »

В итоге кнопки создаются в отдельном окне. Вопрос в том, как сделать так, чтобы они создавались в основном окне (ну и + как этим кнопкам внутри класса передать где именно они должны создаваться (координаты)?
Покажи как реализован конструктор fbutton.
Записан
yesrus
Гость
« Ответ #2 : Ноябрь 14, 2009, 13:51 »

Один из вариантов который будет использоваться (в первом посте то-же самое, только QString параметры не передаются).
Код
C++ (Qt)
fbutton::fbutton( const QString &text, QString* style, const QString &channelll, QWidget *parent )
   : QPushButton( parent )
{
   stat = 0;
   channell = channelll;
   defstyle = *style;
   this->setStyleSheet(defstyle);
   curstyle=this->styleSheet();
   setText(text);
   timer = new QTimer(this);
  connect(timer, SIGNAL(timeout()), this, SLOT(blink()));
  cnt=1;
  testtmr2 = new QTimer(this);
  connect(testtmr2, SIGNAL(timeout()), this, SLOT(test2()));
}
Немного поясню для чего это все делается- пишется интерфейс, и в нем кнопки расположены парно т.е. одна кнопка примерно 200х50 пикселей и рядом с ней (типа как ее продолжение) еще 1 - 50х50 пикселей- эти кнопки могут изменять цвет, проигрывать анимацию и т.д. и чтобы слишком не усложнять код основной программы нужно сделать класс который будет создавать эти кнопки и управлять ими(анимация и все остальное реализовано таймерами).
« Последнее редактирование: Ноябрь 14, 2009, 13:59 от yesrus » Записан
BRE
Гость
« Ответ #3 : Ноябрь 14, 2009, 14:09 »

Код
C++ (Qt)
Myclass test;
В итоге кнопки создаются в отдельном окне. Вопрос в том, как сделать так, чтобы они создавались в основном окне (ну и + как этим кнопкам внутри класса передать где именно они должны создаваться (координаты)?
Кнопки создаются на виджете test, а этот test нужно создавать на главном окне. Т.е. передай ему владельца:
Код
C++ (Qt)
Myclass *test = new Myclass( mainwindow /*this*/ );
Записан
yesrus
Гость
« Ответ #4 : Ноябрь 14, 2009, 14:30 »

Непонятно =(
Как создавать Myclass чтобы можно было передать ему владельца ? Конструктор имеется ввиду.
Если просто создаю без параметров то:
Код
C++ (Qt)
dButton *a1 = new dButton(gui);
 
error: expected primary-expression before ')' token

gui=mainwindow(точнее не совсем мейн виндоу, в данном случае это QDialog.
Записан
BRE
Гость
« Ответ #5 : Ноябрь 14, 2009, 14:45 »

Код
C++ (Qt)
class Widget : public QWidget
{
Q_OBJECT
public:
Widget( QWidget *parent = 0 ) : QWidget( parent )
{
fbutton *btn = new fbutton( this );
}
};
 
Widget w;
w.show();
 
Если делать так, то объект btn будет создан на виджете w.
Если этот виждет w нужно разместить на другом виджете, скажем mainWindow, то нужно его создавать:
Код
C++ (Qt)
Widget w( mainWindow );

Или я не пойму проблемы...   Строит глазки
Записан
yesrus
Гость
« Ответ #6 : Ноябрь 15, 2009, 13:34 »

Забыл, что надо от QWidget'a наследоваться Улыбающийся
Все работает, спасибо огромное за помощь!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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