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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Контекстное меню + Объект  (Прочитано 7899 раз)
¤Se®ega¤
Гость
« : Апрель 30, 2009, 19:11 »

Подскажите как можно реализовать следуюющее:
на форме будет n-ное количество объектов класса QLabel( еще куча других объектов), в QLabel я буду отображаю n картинок.в контекстном меню будет пункт наподобе "изменить картинку".как мне отловить нажатие на конкретный объект и загрузить картинку именнов него?Если возможно, то поподробнее.Заранеее благодарен. Улыбающийся
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Апрель 30, 2009, 19:15 »

Цитировать
void QWidget::customContextMenuRequested ( const QPoint & pos )


и

Цитировать
QObject * QObject::sender () const


тебе в помощь ))
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Апрель 30, 2009, 19:18 »

решение как мне видится - наследуем QLabel, создаём в наследнике обработчике mousePressEevent() и выдаём сигнал по нажатию мыши. Промоутим все необходимые лейблы на форме к нашему наследнику. Соединяем сигналы каждого лейбла с одним слотом. В слоте берём qobject_cast<QLabel *>(sender()) и получаем указатель на лейбл, который вызвал сигнал, и далее делаем с ним что-нибудь нехорошее.

Решению попроще - installEventFilter() на каждый лейбл. И отлавливать нажатия в обработчике.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Апрель 30, 2009, 19:21 »

AX, контекстное меню вызывается по правой кнопке мыши. Сигнал уже есть, ничего переопределять ненужно.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
vaprele07
Гость
« Ответ #4 : Май 01, 2009, 02:34 »

QWidget::addAction
Записан
¤Se®ega¤
Гость
« Ответ #5 : Май 01, 2009, 13:19 »

по поводу тех же самых QLabel. У меня их n штук,и допустим мне надо для некоторых из них задать какой либо параметр (например видимость).Тоесть есть 20 штук, первые 10 я должен сделать невидимыми.Как мне написать функцию, чтобы 10 раз не писать label_(1-10).setVisible()?Как правильно сделать цикл.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Май 01, 2009, 22:18 »

Хранить указатели на каждый экземпляр QLabel, например, в QList'е
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
¤Se®ega¤
Гость
« Ответ #7 : Май 02, 2009, 00:36 »

pastor, а можно поподробнее? Строит глазки
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Май 02, 2009, 10:08 »

Можно )

Код
C++ (Qt)
class ....
{
...
private:
   QList<QLabel *> m_labels;
};



Код
C++ (Qt)
for (int i = 0; i < 20; ++i) {
   QLabel *label = new QLabel("My Label", this);
   // add label to layout, etc
   m_labels.append(label);
}


Код
C++ (Qt)
for (int i = 0; i < 10; ++i)
   m_labels.at(i)->hide();
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
¤Se®ega¤
Гость
« Ответ #9 : Май 02, 2009, 11:30 »

а нельзя через label[ i ]?
« Последнее редактирование: Май 05, 2009, 12:15 от pastor » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #10 : Май 04, 2009, 21:19 »

label_(1-10).setVisible() так?

нет.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
¤Se®ega¤
Гость
« Ответ #11 : Май 05, 2009, 10:50 »

через label[ i ]
Уже сделал. Улыбающийся
« Последнее редактирование: Май 05, 2009, 12:15 от pastor » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #12 : Май 05, 2009, 12:16 »

через label[ i ]
Уже сделал. Улыбающийся

Что значит через label[ i ]? Массив указателей?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
¤Se®ega¤
Гость
« Ответ #13 : Май 05, 2009, 12:27 »

объявляю класс Label *label[40];

Код
C++ (Qt)
for(int i=0;i<10;i++)
{
label[i]=new Label;
label[i]->setVisible();
}

лейуты

в общем примерно так

----
//Обращай внимание на форматирование и отображение поста
« Последнее редактирование: Май 05, 2009, 12:33 от pastor » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #14 : Май 05, 2009, 12:34 »

И в чем отличие от предложенного мной варианта?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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