nixp.ru v3.0

27 мая 2017,
суббота,
01:43:46 MSK

DevOps с компанией «Флант»
ranet написал 18 сентября 2008 года в 15:46 (2418 просмотров) Ведет себя неопределенно; открыл 4 темы в форуме, оставил 11 комментариев на сайте.

Не нашел, какое cобытие срабатывает на раскрытие списка ComboBox в QT4.. Мне показалось, что его вообще нет.. Подскажите пожалуйста..

primus

Сигнала, который эмитируется при раскрытии ComboBox-а действительно нет. А для чего он мог бы пригодиться?

ranet

Нужен не сигнал (signal), а именно событие (event). Сигнал похожий есть, currentIndexChanged(int) называется (выходит при выборе другого пункта в ComboBox). Он бы вполне подошел, но в QT4 сигнал и привинченный к нему слот обязательно должны иметь следующие в одинаковом порядке и совпадающие по типу возврашаемые значения (у сигнала) и воспринимаемые аргументы (у слота). Этот currentIndexChanged(int) возвращает значение типа int (номер выбранного элемента) в списке или QString (видимо текст содержащийся в выбранном элементе списка), мне это не подходит, и вот почему. Есть несколько ComboBox’ов (пока два), и я хотел бы получить указатель на тот, у которого другой пункт списка выбран. Проще всего написать по отдельному слоту для каждого из них (возможно так и придется, если ничего не придумаю), но я хочу написать функцию. Чтобы она по указателю определяла, какой именно ComboBox её вызвал и дальше работала с ним. Цель — собрать в одном месте (функции) все, что будет происходить при выборе в любом из ComboBox’ов другого элемента списка (для удобства последующей поддержки программы, чтобы функция была одна). Это не обязательно, но очень хочется :)

А для обработчика события возвращаемый результат можно самому любой определить, в том числе и указатель на ComboBox.

ranet

Я сообразил, как вывернуться! Можно использовать сигнал currentIndexChanged(QString), он же возвращает нужный мне указатель, функция sender() же есть!

А дальше все великолепно:

QComboBox *SwitchedComboBox;

SwitchedComboBox=(QComboBox*)sender();

И можно делать, чего собирался!!! Ура!!!