Название: Qt 4.2.0 Помогите новичку Отправлено: Kuzemko от Февраль 08, 2007, 08:46 Есть класс главного меню и класс для менеджера проекта, который состоит из QTabWidget на котором создано QTreeWidget а потом четыре QTreeWidgetItem(Описание проекта, Настройка проекта, Схема эл. принцип. и Печатная плата). Научился добавлять в Схему и Печатную платы новые элементы при помощи QAction, которые определены в классе главного окна.
Есть желание создать для каждого QTreeWidgetItem контенкстное меню. Хотел с mouseMoveEvent, но для QTreeWidgetItem он не реализован. :( Сейчас пытаюсь сделать так Код: void Explorer::contextMenuEvent(QContextMenuEvent* event) Так вот в чем вопрос, как мне создать в contextMenuEvent конт. меню с QAction (они в определяються в конструкторе главного окна) Код:
Помогите, буду очень благодарен. :lol: Название: Qt 4.2.0 Помогите новичку Отправлено: alex12 от Февраль 08, 2007, 22:51 По-моему, здесь есть несколько вариантов разных степеней удобства/грамотности:
1) Если это одна единая немасштабируемая программа: самый тупой вариант -- объявить глобальную переменную типа MainWindow*. Тогда из любого места проекта будет доступ к всем переменным всего-чего-можно. Это путь в стиле "C" и для ООП, конечно, смотрится топорно. Но работает эффективно. Код:
2) Везде в иерархии классов передавать ссылки на соответствующие классы, т.е. объявить: Код:
Код:
3) Предыдущий вариант плох тем, что MainWindow и Explorer завязываются друг на друга. Чтобы этого избежать, можно сделать передачу в конструкторе ссылок на все необходимые QAction: Код:
--------------------------------------------------- Кстати, Explorer -- это же наследник какого-то Qt-класса. Поэтому грамотнее написать не Код:
,а Код:
При этом констктор самого класса делать так: Код:
При таком подходе Qt сама заботится об уничтожении Explorer при уничтожении родителя. Никаких delete не нужно. Может кто-нибуть подскажет еще чего более грамотное. |