Russian Qt Forum

Qt => Общие вопросы => Тема начата: akaMDA от Октябрь 18, 2009, 18:42



Название: Контекстное меню
Отправлено: 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);

Почему при нажатии ПКМ на виджете оно не появляется?


Название: Re: Контекстное меню
Отправлено: shadone от Октябрь 18, 2009, 20:06
насколько я помню QTableView/Widget наследуются от QAbstractScrollArea - а это означает что реально все операции происходят во внутреннем виджете - viewport - попробуйте добавить ваши qaction в viewport().


Название: Re: Контекстное меню
Отправлено: akaMDA от Октябрь 18, 2009, 20:21
блиин, стыдно(( :o
 ни к тому присоединил!

Код
C++ (Qt)
table_mytask->setContextMenuPolicy(Qt::ActionsContextMenu);
Вот как надо)))))


Название: Re: Контекстное меню
Отправлено: akaMDA от Октябрь 18, 2009, 21:59
Подскажите еще пожалуйста, если я вызываю этим меню диалоговое окно, то кого надо назначить родителем?
а то this не запускается, а если 0, то может жить и без главного окна, что недопустимо


Название: Re: Контекстное меню
Отправлено: Пантер от Октябрь 19, 2009, 11:33
Вообще this нужно. Не запускается это как? Код запуска сюда.


Название: Re: Контекстное меню
Отправлено: akaMDA от Октябрь 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. Запускается после выбора в контекстном меню.


Название: Re: Контекстное меню
Отправлено: Пантер от Октябрь 19, 2009, 20:21
dialog_mytask->show(); не нужно, так как диалог появляется при exec.
Task_Widget от чего наследуется?


Название: Re: Контекстное меню
Отправлено: akaMDA от Октябрь 19, 2009, 21:07
Task_Widget я сделал без родителей. Он передается как одна из вкладок QTabWidget. Или грамотнее еще и наследовать от QTabWidget?


Название: Re: Контекстное меню
Отправлено: Пантер от Октябрь 19, 2009, 21:13
Да нет, не нужно. При установки вкладки, QTabWidget становится автоматически ее парентом.
Сделай небольшой компилябельный пример.


Название: Re: Контекстное меню
Отправлено: akaMDA от Октябрь 19, 2009, 21:26
я ферштейн!!)) this нельзя, т.к. он прсоединяется к всладке таба. нада к родителю


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


Название: Re: Контекстное меню
Отправлено: akaMDA от Октябрь 19, 2009, 21:33
а не подскажешь, есть адрес, ну например 1.doc. как открыть его вордом. есть такая функция, ну кроме system()?


Название: Re: Контекстное меню
Отправлено: Авварон от Октябрь 19, 2009, 22:12
QDesktopServices::openUrl


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