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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Контекстное меню  (Прочитано 7948 раз)
akaMDA
Гость
« : Октябрь 18, 2009, 18:42 »

Есть QTableWidget. Создаю к нему контекстное меню.
           
Код
C++ (Qt)
act_openMyTask=new QAction(QString::fromLocal8Bit("Открыть задачу"), table_mytask);
connect(act_openMyTask, SIGNAL(triggered()), table_mytask, SLOT(openMyTask()));
table_mytask->addAction(act_openMyTask);
setContextMenuPolicy(Qt::ActionsContextMenu);

Почему при нажатии ПКМ на виджете оно не появляется?
Записан
shadone
Гость
« Ответ #1 : Октябрь 18, 2009, 20:06 »

насколько я помню QTableView/Widget наследуются от QAbstractScrollArea - а это означает что реально все операции происходят во внутреннем виджете - viewport - попробуйте добавить ваши qaction в viewport().
Записан
akaMDA
Гость
« Ответ #2 : Октябрь 18, 2009, 20:21 »

блиин, стыдно(( Шокированный
 ни к тому присоединил!

Код
C++ (Qt)
table_mytask->setContextMenuPolicy(Qt::ActionsContextMenu);
Вот как надо)))))
Записан
akaMDA
Гость
« Ответ #3 : Октябрь 18, 2009, 21:59 »

Подскажите еще пожалуйста, если я вызываю этим меню диалоговое окно, то кого надо назначить родителем?
а то this не запускается, а если 0, то может жить и без главного окна, что недопустимо
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Октябрь 19, 2009, 11:33 »

Вообще this нужно. Не запускается это как? Код запуска сюда.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
akaMDA
Гость
« Ответ #5 : Октябрь 19, 2009, 19:07 »

Код
C++ (Qt)
int Task_Widget::openMyTask()
{
dialog_mytask=new Dialog_MyTask(this);
dialog_mytask->show();
return dialog_mytask->exec();
};
openMyTask() - приват слот Task_Widget. Запускается после выбора в контекстном меню.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Октябрь 19, 2009, 20:21 »

dialog_mytask->show(); не нужно, так как диалог появляется при exec.
Task_Widget от чего наследуется?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
akaMDA
Гость
« Ответ #7 : Октябрь 19, 2009, 21:07 »

Task_Widget я сделал без родителей. Он передается как одна из вкладок QTabWidget. Или грамотнее еще и наследовать от QTabWidget?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Октябрь 19, 2009, 21:13 »

Да нет, не нужно. При установки вкладки, QTabWidget становится автоматически ее парентом.
Сделай небольшой компилябельный пример.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
akaMDA
Гость
« Ответ #9 : Октябрь 19, 2009, 21:26 »

я ферштейн!!)) this нельзя, т.к. он прсоединяется к всладке таба. нада к родителю
Записан
akaMDA
Гость
« Ответ #10 : Октябрь 19, 2009, 21:31 »

Код
C++ (Qt)
dialog_mytask=new Dialog_MyTask(this->parentWidget()->parentWidget()->parentWidget()->parentWidget()->parentWidget());
вот так извратно дошел до мэйнвиджет. теперь пашет, как надо.
Записан
akaMDA
Гость
« Ответ #11 : Октябрь 19, 2009, 21:33 »

а не подскажешь, есть адрес, ну например 1.doc. как открыть его вордом. есть такая функция, ну кроме system()?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #12 : Октябрь 19, 2009, 22:12 »

QDesktopServices::openUrl
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #13 : Октябрь 19, 2009, 22:38 »

Код
C++ (Qt)
dialog_mytask=new Dialog_MyTask(this->parentWidget()->parentWidget()->parentWidget()->parentWidget()->parentWidget());
вот так извратно дошел до мэйнвиджет. теперь пашет, как надо.
Это ТАКОЙ изврат... Пересмотри архитектуру. И еще раз предлагаю запостить сюда минимальный компилябельный пример.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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