Название: Добавление кнопки на виджет Отправлено: Ovoshlook от Сентябрь 19, 2010, 16:22 Суть проблемы не настолько тривиальна как звучит тема)):
Есть TabWidget. При создании вкладки на ней создается Widget, на Widget'e создается компоновщик и кнопка в нем (в компоновщике), которая добавляет объект на данную вкладку (ну собсвтенно в компоновщик, как все поняли). Если я создаю вкладку и работаю с кнопкой- то она создает объект именно на этой вкладке, которая активна, но как только я переключаю вкладку и работаю на переключенной то возникает проблема: Когда я нажимаю на кнопку для того чтобы создать объект на этой вкладке, то объект создается, но создается он не на той вкладке которая сейчас активна, а на той что была создана последней. Код С++ void CTF::CreateNewTab() //непосредственно создаю вкладку { Global::k++; MainTabWidget=new QWidget ; TabLayout=new QGridLayout; QString v = QString::number(Global::k); BoxOfQ->addTab(MainTabWidget,v);//BoxOfQ это сам TabWidget BoxOfQ->setCurrentWidget(MainTabWidget); //Ставлю Виджет на TabWidget как активный. MainTabWidget->setLayout(TabLayout); } void CTF::CreateQOnTab(int)// Создаются объекты на вкладке TabWidget'a { ObektiNaWidgete(); //немного подсократил. Оставил саму суть. С помощью этой функции создаются объекты. Функия описана ниже connect (BoxOfQ, SIGNAL (currentChanged(int)),this, SLOT (currentTab(int))); //соединяю сигнал об изменении активной вкладки со слотом передачи активности тому виджету, который находится на активной вкладке (currentTab(int) будет описана ниже) void CTF::ObektiNaWidgete()// Создание объектов на Widget'e { QuochtTextEdit=new QTextEdit; AddNewAnsverVariant= new QPushButton (this); TabLayout->addWidget( QuochtTextEdit,1,1,6,3); TabLayout->addWidget( AddNewAnsverVariant,7,3,1,1); connect (AddNewAnsverVariant, SIGNAL (clicked()),this ,SLOT(createNewAnsverVariant())); //Сигнал, соединяющий кнопку для создания объекта на Widget'e со слотом который эту кнопку создает. } void CTF::currentTab(int)// слот передачи активности тому виджету, который находится на активной вкладке { w=BoxOfQ->currentWidget(); } void CTF::createNewAnsverVariant()// здесь в общем (не вдаваясь в подробности) создается окошко для создания объекта на widget { BoxOfQ->setCurrentWidget(w);//после изменения вкладки делаю активным widget той вкладки,которая сейчас активна Form=new dialog_addNewAnsverVariant(this); Form->show(); connect (Form->AddAnsverButton,SIGNAL (clicked()), this, SLOT (addNewVariantAnsver())); //связываю сигнал по нажатию кнопки в окошке, со слотом создания объекта на widget'e } void CTF::addNewVariantAnsver() //собственно создание объекта на widget'e активной вкладки { NewVariant=new QRadioButton; TabLayout->addWidget(NewVariant,Global::i,1,1,1); //добавляю созданный объект на widget в компановщик. Form->close(); Global::i++; } Так и не понимаю в чем у меня промах- если есть у кого идеи подскажите. Заранее всем спасибо. Название: Re: Добавление кнопки на виджет Отправлено: kibsoft от Сентябрь 19, 2010, 17:42 в TabLayout у тебя хранится указатель на последний созданный компоновщик. Поэтому должно быть так:
Код: void CTF::addNewVariantAnsver() //собственно создание объекта на widget'e активной вкладки P.S. ObektiNaWidgete() - этой полный капец)) никогда не пишите транслитом.. createNewAnsverVariant() - тут как я понял, вы попытались блеснуть английским :) правильно Answer И еще - названия переменных тоже жесть, попытайтесь давать осмысленные имена, а не набор букв. Название: Re: Добавление кнопки на виджет Отправлено: Ovoshlook от Сентябрь 19, 2010, 18:41 Да я транслитом и не пишу) просто тут (на форуме) написал чтобы понятнее было, потомк что моя функция там совсем по другому назывется)) Ну и с английским у меня тяжко немного) А с переменными-то мне так удобнее)) так привык.
По сабжу: Спасибо огромное!!)) Усе работает, только проблемка одна для layout()->addWidget(Widget* widget) не определена перегруженная функция (ну там где можно задавать координаты виджета на сетке. Оно и понятно почему: layout это родитель GridLayout как я понимаю) но все таки может есть возможность каким нить образом переопределить addWidget так чтобы можно было работать с координатами сетки?? Название: Re: Добавление кнопки на виджет Отправлено: kibsoft от Сентябрь 19, 2010, 21:13 Код: QGridLayout *layout = static_cast<QGridLayout*>(BoxOfQ->currentWidget()->layout()); Название: Re: Добавление кнопки на виджет Отправлено: Ovoshlook от Сентябрь 25, 2010, 16:34 Давно не появлялся) Времени не было. Спасибо вам большое, хот и запоздалое за помощь. ОЧень ценю)
Только снова проблема. При вышеописаном приведении типов компилятор ругается о том что BoxOfQ Не является членом класса QGridLayout... Не совсем понятно почему? вроде бы приведено к типу было... З.Ы. Не подумайте что думать лень и тому подобное, просто я новичок в с++, и некоторые вещи еще не до конца понимаю. Но я стараюсь) правда) Название: Re: Добавление кнопки на виджет Отправлено: kibsoft от Сентябрь 25, 2010, 17:01 Цитировать о том что BoxOfQ Не является членом класса QGridLayout Так BoxOfQ - это TabWidget в вашем коде..Название: Re: Добавление кнопки на виджет Отправлено: Ovoshlook от Сентябрь 25, 2010, 17:07 Ой) Усе понял просто вместо вот этого как у вас в примере:
layout->BoxOfQ->currentWidget()->layout()->addWidget(NewVariant,Global::i,1,1,1); Написал layout->addWidget(NewVariant,Global::i,1,1,1); К типу ведь привели вот этот отрезок BoxOfQ->currentWidget()->layout() Все заработало. Спасибо вам огромное еще раз) Заодно попрактиковался сприведением типов) Просто не сталкивался с этим еще) вот и затупил)) |