LINUX.ORG.RU

Данные при нажатии на кнопку

 , ,


0

1

Здравствуйте, я не опытен в Qt, поэтому сей вопрос.

Есть класс для основного окна: MainWindow, в нем я обращаюсь к базе, за сохраненными сессиями и создаю кнопки, по которым их можно восстановить:

while(query.next())
{
    QCommandLinkButton *button = new QCommandLinkButton(query.value(1).toString(),this);
    ui->layout_sessions->addWidget(button);
}
Где query.value(1).toString() текст отображаемый на кнопке. Вопрос: Как можно сделать так, что бы при нажатии на вновь созданную кнопку, посылался query.value(1).toString() на слот в текущем MainWindow классе? Можно ли это сделать без создания дочернего класса для QCommandLinkButton(его использую только раз, и не хочу лишний класс). Или лучше другим способом организовать? Это нужно для передачи в просмоторщик сессий информации о выбранной.

судя во всему копать следует в сторону QSignalMapper

trex6 ★★★★★
()
Ответ на: комментарий от Noloboot

думаю то, что нужно

Динамические выкрутасы = готовься к тормозам.

no-such-file ★★★★★
()

не хочу лишний класс

Он не лишний. Просто вы этого еще не осознали, что ваш класс сессий должен наследоваться от QCommandLinkButton.

no-such-file ★★★★★
()
Ответ на: комментарий от dib2

holy shit....

Если данные сессии хранятся в кнопке, то по нажатию кнопки можно высылать сигнал с этими данными, а не городить ручную диспетчеризацию по названию сессии. Зачем делать из крестов интерпретатор?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

наследовать-то зачем??

QHash<QString, QVariant> не делает из крестов интерпретатор, хотя решение и далеко от идеалов производительности.

dib2 ★★★★★
()
Ответ на: комментарий от dib2

QHash<QString, QVariant> не делает из крестов интерпретатор

Делает. Выбор объекта по строке и есть интерпретация строк. Но зачем, если можно:

1. Хранить в классе кнопки указатель/ссылку на экземпляр сессии и передавать его при нажатии

или

2. Наследовать класс сессии от кнопки и обрабатывать событие нажатия

или

3.Хранить кнопу в классе сессий и при конструировании кнопки связывать нажатие со слотом в текущем объекте сессии.

Нет, мы будем использовать перебор или маппинг строка->объект и обрабатывать это в рантайме руками.

Кстати при маппинге встает вопрос о сравнении строк и юникоде.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Делает. Выбор объекта по строке и есть интерпретация строк.

о как. а какие еще алгоритмы вы считаете «интерпретацией»? просто интересно.

1. Хранить в классе кнопки указатель/ссылку на экземпляр сессии и передавать его при нажатии

собственно предложен один из способов делать это

2. Наследовать класс сессии от кнопки и обрабатывать событие нажатия

....

3.Хранить кнопу в классе сессий и при конструировании кнопки связывать нажатие со слотом в текущем объекте сессии.

да и кнопку хранить не надо. просто подписаться на сигнал. Но тут на класс сессий будет наложено ярмо в виде QOBJECT, что не всегда возможно.

Нет, мы будем использовать перебор или маппинг строка->объект и обрабатывать это в рантайме руками.

там делов-то... и да, AFAIK, строки сходу никто не сравнивает, вначале идет сравнение хешей, которые quint32. А свойств там совсем немного, кроме того, кастомные свойства могут вообще храниться отдельным мапом (не смотрел).

Кстати при маппинге встает вопрос о сравнении строк и юникоде.

там везде UCS-2. никто же не говорит об именах свойств китайскими иероглифами. KISS.

Вообще, хранение объектов модели или контроллера во вьювах - как-то это по-дотнетовски, там вечно все в Control.Tag суют... Qt-way - это создание модели сессий, и работа с ними в традициях MV(C), а не кастомные хаки вроде сабжа.

dib2 ★★★★★
()
Ответ на: комментарий от dib2

там везде UCS-2. никто же не говорит об именах свойств китайскими иероглифами. KISS.

Дело в том, что строки имеющие разные знаки могут быть равными. Например в русском языке слова с 'e' и 'ё' одинаковые, но в QMap это, естественно, не учитывается. То же можно сказать и о многих европейских языках, где всякие акуты и грависы допускается иногда не писать, но слово от этого не меняется.

как-то это по-дотнетовски

Как будто это что-то плохое.

Qt-way - это создание модели сессий, и работа с ними в традициях MV(C), а не кастомные хаки вроде сабжа.

С эти я полностью согласен, но ТС не хочет лишних движений. Мне не понятно, почему заниматься извращениями с поиском сессии по названию, да еще запихивая название в динамические свойства, лучше, чем просто кидать указатель на сессию или использовать наследование и иметь класс сессия-с-кнопкой, который все делает внутри. Если уж так неохота делать нормальный MV.

Ну да ладно, хозяин - барин.

no-such-file ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.