LINUX.ORG.RU

Передача виджета.


0

0

Есть обьект класса A производный от QWidget. Есть класс B, так же производный от QWidget, в котором, суествует обьект Vector класса QPtrList. Так вот, в обьекте класса A создаётся кнопка. Затем этот обьект передаётся классу B который в свою очередь добавляет этот обьект в Vector, с ним в Vector'е делается reparent, resize, это надо, что бы сменить родителя обьекта A (родитель 0, т.е. дефолт) на класс B, т.е. родителем А становиться B.Так вот, на поверхности обьекта класса A не видно кнопки (как я понял это связано с reparent), но она точно созданна, однако, если кнопку добавить не в классе А а в классе В сразу после вставки обьекта класса А в Vector и последующего reparent'а, то кнопку видно. Кнопка в обоих случаях создаётся одним способом. Вопрос, почему кнопка созданная в классе А не видна при переносе обьекта класса А в обьект класса В, а кнопка созданна в обьекте класса В но с указанием родителя обьекта класса А, видна?

Заранее спасибо!!!

★★★★★

а button->show() не пробовал вызывать, после создания конпки в классе A ?

А reparent ты вызываешь с showIt == true ? Ну так всё ПРАВИЛЬНО работает. Просто надо читать доку иногда, и, в конце концов, экспериментировать.

Keiko
()
Ответ на: комментарий от Keiko

> а button->show() не пробовал вызывать, после создания конпки в классе A ?

Ну если бы было всё так просто я бы не стал спращивать ;)

> А reparent ты вызываешь с showIt == true ? Ну так всё ПРАВИЛЬНО работает.

Так вроде бы showIt и так стоит true, т.к. как я уже сказал, что если кнопку делать в классе В, то она видна без всяких допролнительных заморочек типа button->show().

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

А кроме как экспериментами мне больше и ничего не остаётся :(

cyclon ★★★★★
() автор топика
Ответ на: комментарий от Keiko

Ну можно и показать:

*************************************************************
QWidget *t = new QWidget; <--- не работает ни с этим
kmmsPlaylist *pl = new kmmsPlaylist("TEST"); <--ни с этим
pl->addItem("test","test");

kmmsPlaylist *pl1 = new kmmsPlaylist("TEST");
pl1->addItem("test","test");

controlw->createTabs(scin->controlheader, scin->controlaheader);
controlw->addTab(t);
controlw->setActiveTab(0);

playlistw->createTabs(scin->playlistheader, scin->playlistaheader);
playlistw->addTab(pl);
playlistw->addTab(pl1);
playlistw->setActiveTab(0);
**************************************************************

**************************************************************
class kmmsPlaylist : public QWidget
{
Q_OBJECT

public:

kmmsPlaylist(QString name); //constructor
~kmmsPlaylist(); //destructor

void savePlaylist(); //write playlist to hdd
void loadPlaylist(); //read playlist from hdd
QString* name(){return name_playlist;} //name of playlist
void setName(QString name); //set name of playlist

void addItem(QString path_to_file, QString name); //add item to playlist
void removeItem(QString); //remove item from playlist
int numItem(){return num_items;} //num of items in playlist

private:

QString *name_playlist; //name of playlist
int num_items; //num of items
QStringList *str_items; //content of playlist
QPtrList<QLabel> items; //vector of items of list
};
class kmmsPlaylistWindow : public kmmsWindow
{

public:
kmmsPlaylistWindow(int type, int flags, QObject *o); //constructor
~kmmsPlaylistWindow(); //destructor

void createTabs(QPixmap *header, QPixmap *header); //create tabs object
void addTab(QWidget *w); //add tab to tabs
void setActiveTab(int n); //set active tab
void tabsResize(int width, int height); //resize workspace of tabs

void resizePlaylistw(); //resieze playlist window

kmmsTabs *tabs; //tabs object
}
**************************************************************

**************************************************************
void kmmsPlaylistWindow::createTabs(QPixmap *header, QPixmap *aheader)
{
QPixmap *tmp = new QPixmap(*this->space->backgroundPixmap());

tabs = new kmmsTabs(0, 0, this->space->width(), this->space->height(), tmp, space);

tmp = new QPixmap(*this->space->backgroundPixmap());
tabs->setSpacePix(tmp);

tabs->setHeaderPix(header, aheader);

delete tmp;
}

void kmmsPlaylist::addItem(QString path, QString name)
{
items.append (new QLabel(this));
items.at(num_items)->show();
num_items++;

QLabel *l = new QLabel(this);
l->show();
l->resize(100,100);
l->move(0,0);
l->setText(name);
}

**************************************************************

**************************************************************

void kmmsTabs::addTab(QWidget *tab)
{
header.append (new kmmsTabHeader(this, num_tabs));
header.at(num_tabs)->move(num_tabs*(headerXSize + 2)+3,4);
header.at(num_tabs)->resize(headerXSize, headerYSize);
if (headerPix) header.at(num_tabs)->setBackgroundPixmap(*headerPix);

connect (header.at(num_tabs),SIGNAL(clicked(int)),this,SLOT(setActiveTab(int)));

space.append (new QWidget(tab));
space.at(num_tabs)->reparent(this,QPoint(0,headerYSize + 10));
space.at(num_tabs)->resize(width(),height() - (headerYSize + 5));
if (spacePix) space.at(num_tabs)->setBackgroundPixmap(*spacePix);

num_tabs++;
}

**************************************************************


cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

А вот если так

**************************************************************

void kmmsTabs::addTab(QWidget *tab)
{
header.append (new kmmsTabHeader(this, num_tabs));
header.at(num_tabs)->move(num_tabs*(headerXSize + 2)+3,4);
header.at(num_tabs)->resize(headerXSize, headerYSize);
if (headerPix) header.at(num_tabs)->setBackgroundPixmap(*headerPix);

connect (header.at(num_tabs),SIGNAL(clicked(int)),this,SLOT(setActiveTab(int)));

space.append (new QWidget(tab));
space.at(num_tabs)->reparent(this,QPoint(0,headerYSize + 10));
space.at(num_tabs)->resize(width(),height() - (headerYSize + 5));
if (spacePix) space.at(num_tabs)->setBackgroundPixmap(*spacePix);

QPushButton *b = new QPushButton(space.at(num_tabs));

num_tabs++;
}

**************************************************************

т.е. добавить

QPushButton *b = new QPushButton(space.at(num_tabs));

то, кнопка появляется.

cyclon ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.