コンテキストメニュー内に配置されるいくつかのアクションを作成しました。次に、これらの同じアクションを小さなツールバーに追加します。問題は、ツールバーをドック領域の1つではなく、VerticalLayout内(別のウィジェットの下)に配置する必要があることです。ツールバーをカスタムの場所に移動したり、アクションを別のコンテナー内に配置したりする方法はありますか?
1 に答える
QActions
メニューとツールバーにのみ追加することになっています。
私があなたをそこに連れて行ったら、あなたはQActions
通常のウィジェットに配置できるようにしたいと思いますよね?
回避策は、独自のQPushButton
クラスを実装することです。このクラスに、次を実行する addAction メソッドを指定します。ボタンのメンバーとしてを追加しQAction
、QAction のテキストをボタンのラベルとして設定し、ボタンのシグナルclicked()
をアクションのスロットtrigger()
に接続します。
このようなもの:
void my_button::addAction(QAction* p_action)
{
if( pAction != NULL )
{
m_linked_action = p_action;
setText(m_linked_action->text());
connect(this,SIGNAL(clicked()),m_linked_action,SLOT(trigger()));
}
else
{
assert(false);
}
}
これは非常に大まかな例です。アクションを削除するときに信号を適切に切断するなど、多くのことを考慮する必要があります。また、チェック可能なアクションやそのようなものの特別な扱いにも注意する必要があります(プッシュボタンもチェック可能である必要があり、信号が接続されている必要があります...)。しかし、これは始めるには良い方法だと思います。
代替手段:接続する代わりにできることは、ボタンの を
再実装してそこに呼び出すことです。このような:mouseReleaseEvent
QAction::trigger()
void my_button::mouseReleaseEvent( QMouseEvent* e )
{
if( e->button() == Qt::LeftButton )
{
if(m_linked_action != NULL)
{
m_linked_action->trigger();
}
}
QPushButton::mouseReleaseEvent(e);
}
このようにすると、ボタンをどこにでも配置でき、ボタンをクリックするとリンクされたアクションがトリガーされます。