Название: [Qt3]проблема с кнопками ! Отправлено: remiznik от Июнь 20, 2008, 19:27 большая программа но в ней есть трудности
суть программы которую пишу ! создаю кнопки и надо чтоб при нажатии на них выскакивало диалоговое окно ColorDialog в котором выбирали нужный цвет и в последствии этот цвет становился фоновым для кнопки которая вызвала диалог ! немогу никак разобраться как отловить какая кнопка из массива кнопок вызвана !! вот пример кода ! вот массив галочек и кнопок !!! тут же и соединение с сигналом вызывавшим диалоговое окно ! Код: for (i=0; i<8; i++) Код: void CheckForm::slotGetColor() если надо могу кинуть полный исходник программы вызывавшей чекбокс с кнопками ! Название: Re: [Qt3]проблема с кнопками ! Отправлено: Mikhail от Июнь 20, 2008, 19:36 большая программа но в ней есть трудности суть программы которую пишу ! создаю кнопки и надо чтоб при нажатии на них выскакивало диалоговое окно ColorDialog в котором выбирали нужный цвет и в последствии этот цвет становился фоновым для кнопки которая вызвала диалог ! немогу никак разобраться как отловить какая кнопка из массива кнопок вызвана !! вот пример кода ! вот массив галочек и кнопок !!! тут же и соединение с сигналом вызывавшим диалоговое окно ! for (i=0; i<8; i++) { CB = new QCheckBox( this, "CB" ); CB->setGeometry( QRect( 10+i*40, 15, 40, 20 ) ); CBB=new QPushButton(" ",BoxChecker); CBB->setFlat(true); CBB->setGeometry(10+i*40, 35, 13, 13); connect(CBB,SIGNAL(clicked()), SLOT(slotGetColor())); } вот сам слот void CheckForm::slotGetColor() { QColor color=QColorDialog::getColor(blue,this); if(!color.isValid()) { } else // при нажатии ОК здесь должен сменится цвет кнопки ! { if(CBB[1]->isOn()) CBB[1]->setPaletteBackgroundColor(color); } } трудность в том не понимаю как из масива событий поймать нажатую кнопку ! если надо могу кинуть полный исходник программы вызывавшей чекбокс с кнопками ! В слоте используй sender(). Получишь указатель на объект испустивший сигнал. const QObject * QObject::sender () [protected] Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns 0. The pointer is valid only during the execution of the slot that calls this function. Название: Re: [Qt3]проблема с кнопками ! Отправлено: remiznik от Июнь 20, 2008, 19:44 слушай я не очень пока в Qt можеш привести код как мне это использовать и где ? в слоте getColor? или сразу после connect ?
Название: Re: [Qt3]проблема с кнопками ! Отправлено: lit-uriy от Июнь 20, 2008, 22:16 чет я немного туплю, а как у тебя объявлены CB и CBB? покажы весь код.
Название: Re: [Qt3]проблема с кнопками ! Отправлено: Sergeich от Июнь 20, 2008, 22:31 Код: void CheckForm::slotGetColor() Название: Re: [Qt3]проблема с кнопками ! Отправлено: remiznik от Июнь 20, 2008, 22:39 работает !!! но я не понимаю смысла вот это строк
QPushButton* button = (QPushButton*) sender(); зачем мы создаём ешё какуюто кнопку ? и понимаешь .... эти кнопки будут в основной програме привзяна к цвету графика при выборе цвета должен менятся цвет гравика на цвет выбраный и отрожаемый фоном кнопки ! например первая кнопка это первый график вторая кнопка вторая !!! как мне определить где какая кнопка ? Название: Re: [Qt3]проблема с кнопками ! Отправлено: pastor от Июнь 20, 2008, 23:28 работает !!! но я не понимаю смысла вот это строк QPushButton* button = (QPushButton*) sender(); зачем мы создаём ешё какуюто кнопку ? уууу товарищь, это практически азы! Вам сначало нужно С\С++ изучить, а потом уже за Qt браться как мне определить где какая кнопка ? 1) Задать имя объекта. см. setName 2) можно ещё заюзать QSignalMapper и задать айди для каждой кнопки. Как по мне, второе предпочтительнее ЗЫ: И так, на будующее, пользуйтесь тегами КОД, когда постите код Название: Re: [Qt3]проблема с кнопками ! Отправлено: Sergeich от Июнь 20, 2008, 23:50 2 pastor: опередил :)
Гмм... тяжелый случай :D Цитировать работает !!! но я не понимаю смысла вот это строк Работает - тогда ничего не трогай... :D Кнопка тут не создается, это простое приведение типа из QObject* в QPushButton*. Новые кнопки создаются оператором new :)QPushButton* button = (QPushButton*) sender(); зачем мы создаём ешё какуюто кнопку ? Цитировать и понимаешь .... эти кнопки будут в основной програме привзяна к цвету графика при выборе цвета должен менятся цвет гравика на цвет выбраный и отрожаемый фоном кнопки ! Тогда юзай QSignalMapper:например первая кнопка это первый график вторая кнопка вторая !!! как мне определить где какая кнопка ? Код: // Создаем кнопки Название: Re: [Qt3]проблема с кнопками ! Отправлено: remiznik от Июнь 21, 2008, 15:24 да уроки русского косил !!
на счёт кнопки вы правы что-то я на косячил ....)) а на счот задать айди для каждой кнопки я это с самога начала хотел зделать только не очень понимал как это реализовать ! Код: QValueVector<QPushButton*> buttonArray; Код: mapper->setMapping( button, i ); Код: QSignalMapper* mapper = QSignalMapper( widget ); и ешё я не очень понял в какой переменой хранится нажатая кнопка ? код не работает пишит что No such slot QGroupBox::onButtonClick(int) !!! Название: Re: [Qt3]проблема с кнопками ! Отправлено: Mikhail от Июнь 21, 2008, 18:28 да уроки русского косил !! на счёт кнопки вы правы что-то я на косячил ....)) а на счот задать айди для каждой кнопки я это с самога начала хотел зделать только не очень понимал как это реализовать ! Код: QValueVector<QPushButton*> buttonArray; Код: mapper->setMapping( button, i ); Код: QSignalMapper* mapper = QSignalMapper( widget ); и ешё я не очень понял в какой переменой хранится нажатая кнопка ? код не работает пишит что No such slot QGroupBox::onButtonClick(int) !!! QValueVector<QPushButton*> buttonArray; для хранения указателей на ваши кнопки. Код не работает потому, чт бездумно поправлен. Конечно QGroupBox не имеет слота onButtonClick(int). Создай слот onButtonClick(int) и в нем веди обработку как писал Sergeich. Название: Re: [Qt3]проблема с кнопками ! Отправлено: remiznik от Июнь 21, 2008, 18:52 Цитировать Код не работает потому, чт бездумно поправлен. я конечно не профессионал но слот создал !! Конечно QGroupBox не имеет слота onButtonClick(int). Создай слот onButtonClick(int) и в нем веди обработку как писал Sergeich. Код: #include <qapplication.h> Название: Re: [Qt3]проблема с кнопками ! Отправлено: pastor от Июнь 21, 2008, 19:35 я конечно не профессионал но слот создал !! А де ты создал этот слот? В CheckForm? А конектишь тогда зачем к QGroupBox? Цитировать connect( mapper, SIGNAL(mapped(int)), BoxChecker, SLOT(onButtonClick(int)) ); тогда уж нужно так: Цитировать connect( mapper, SIGNAL(mapped(int)), this, SLOT(onButtonClick(int)) ); Название: Re: [Qt3]проблема с кнопками ! Отправлено: remiznik от Июнь 22, 2008, 12:44 но я всёравно не понимаю где там хронится номер вызваной кнопки и как мне получить его ?
Название: Re: [Qt3]проблема с кнопками ! Отправлено: Sergeich от Июнь 22, 2008, 13:52 но я всёравно не понимаю где там хронится номер вызваной кнопки и как мне получить его ? Номер кнопки хранится в QSignalMapper, устанавливается методом setMapping, а получить его можно из параметра i слота CheckForm::onButtonClick |