Есть обьект класса A производный от QWidget. Есть класс B, так же производный от QWidget, в котором, суествует обьект Vector класса QPtrList. Так вот, в обьекте класса A создаётся кнопка. Затем этот обьект передаётся классу B который в свою очередь добавляет этот обьект в Vector, с ним в Vector'е делается reparent, resize, это надо, что бы сменить родителя обьекта A (родитель 0, т.е. дефолт) на класс B, т.е. родителем А становиться B.Так вот, на поверхности обьекта класса A не видно кнопки (как я понял это связано с reparent), но она точно созданна, однако, если кнопку добавить не в классе А а в классе В сразу после вставки обьекта класса А в Vector и последующего reparent'а, то кнопку видно. Кнопка в обоих случаях создаётся одним способом. Вопрос, почему кнопка созданная в классе А не видна при переносе обьекта класса А в обьект класса В, а кнопка созданна в обьекте класса В но с указанием родителя обьекта класса А, видна.
Код:
*************************************************************
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++;
}
**************************************************************
А вот если так
**************************************************************
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));
то, кнопка появляется, на нужен именно первый вариант.
Заранее спасибо!!!
Похожие темы
- Форум В чём прикол? (2005)
- Форум Динамический массив QWidget'ов. (2005)
- Форум И в последний раз о передаче виджета :( (2005)
- Форум Проблемма с инклудами!!! (2005)
- Форум Не получается заюзать таймер в QT. (2004)
- Форум Несрабатывает слот от сигнала. (2005)
- Форум Помигите с Qt4: Сигналы и Слоты (очень срочно) (2006)
- Форум QTabWidget и динамически изменяющаяся страница (2013)
- Форум Как найти через findChild() член класса по QObject-имени? (2016)
- Форум Опять связать сигнал со слотом :( (2005)