Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ¤Se®ega¤ от Апрель 30, 2009, 19:11



Название: Контекстное меню + Объект
Отправлено: ¤Se®ega¤ от Апрель 30, 2009, 19:11
Подскажите как можно реализовать следуюющее:
на форме будет n-ное количество объектов класса QLabel( еще куча других объектов), в QLabel я буду отображаю n картинок.в контекстном меню будет пункт наподобе "изменить картинку".как мне отловить нажатие на конкретный объект и загрузить картинку именнов него?Если возможно, то поподробнее.Заранеее благодарен. :)


Название: Re: Контекстное меню + Объект
Отправлено: pastor от Апрель 30, 2009, 19:15
Цитировать
void QWidget::customContextMenuRequested ( const QPoint & pos )


и

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


тебе в помощь ))


Название: Re: Контекстное меню + Объект
Отправлено: Alex Custov от Апрель 30, 2009, 19:18
решение как мне видится - наследуем QLabel, создаём в наследнике обработчике mousePressEevent() и выдаём сигнал по нажатию мыши. Промоутим все необходимые лейблы на форме к нашему наследнику. Соединяем сигналы каждого лейбла с одним слотом. В слоте берём qobject_cast<QLabel *>(sender()) и получаем указатель на лейбл, который вызвал сигнал, и далее делаем с ним что-нибудь нехорошее.

Решению попроще - installEventFilter() на каждый лейбл. И отлавливать нажатия в обработчике.


Название: Re: Контекстное меню + Объект
Отправлено: pastor от Апрель 30, 2009, 19:21
AX, контекстное меню вызывается по правой кнопке мыши. Сигнал уже есть, ничего переопределять ненужно.


Название: Re: Контекстное меню + Объект
Отправлено: vaprele07 от Май 01, 2009, 02:34
QWidget::addAction


Название: Re: Контекстное меню + Объект
Отправлено: ¤Se®ega¤ от Май 01, 2009, 13:19
по поводу тех же самых QLabel. У меня их n штук,и допустим мне надо для некоторых из них задать какой либо параметр (например видимость).Тоесть есть 20 штук, первые 10 я должен сделать невидимыми.Как мне написать функцию, чтобы 10 раз не писать label_(1-10).setVisible()?Как правильно сделать цикл.


Название: Re: Контекстное меню + Объект
Отправлено: pastor от Май 01, 2009, 22:18
Хранить указатели на каждый экземпляр QLabel, например, в QList'е


Название: Re: Контекстное меню + Объект
Отправлено: ¤Se®ega¤ от Май 02, 2009, 00:36
pastor, а можно поподробнее? ::)


Название: Re: Контекстное меню + Объект
Отправлено: pastor от Май 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();


Название: Re: Контекстное меню + Объект
Отправлено: ¤Se®ega¤ от Май 02, 2009, 11:30
а нельзя через label[ i ]?


Название: Re: Контекстное меню + Объект
Отправлено: pastor от Май 04, 2009, 21:19
label_(1-10).setVisible() так?

нет.


Название: Re: Контекстное меню + Объект
Отправлено: ¤Se®ega¤ от Май 05, 2009, 10:50
через label[ i ]
Уже сделал. :)


Название: Re: Контекстное меню + Объект
Отправлено: pastor от Май 05, 2009, 12:16
через label[ i ]
Уже сделал. :)

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


Название: Re: Контекстное меню + Объект
Отправлено: ¤Se®ega¤ от Май 05, 2009, 12:27
объявляю класс Label *label[40];

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

лейуты

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

----
//Обращай внимание на форматирование и отображение поста


Название: Re: Контекстное меню + Объект
Отправлено: pastor от Май 05, 2009, 12:34
И в чем отличие от предложенного мной варианта?


Название: Re: Контекстное меню + Объект
Отправлено: ¤Se®ega¤ от Май 05, 2009, 12:39
а там mtp Qlist'a просто;сразу указатели  :) принципиально ничего нового, но мне как-то так проще было )))спасибо за идею