相同的操作QAction

包装一个菜单类,用来构造菜单

void menu::on_menu_clicked()
{
    QAction *act = qobject_cast<QAction *>( this->sender() );
    if( act )
    {
        int index = act->property("menu_action_index").toInt();
        if( index >= 0 ) emit action_clicked( act, index );
    }
}

点击了菜单之后发送信号,在槽函数的地方,根据不同的index来识别处理

 

 

QAction * menu::create_action( QMenu *menu, const menu_action *data )
{
    QAction *act = data->m_icon.isEmpty() ? new QAction( data->m_text, menu ) : 
        new QAction( QPixmap( data->m_icon ), data->m_text, menu );
    menu->addAction(act);
    if( !data->m_short_key.isEmpty() )
    {
        act->setShortcut( data->m_short_key );
        act->setShortcutContext(Qt::WindowShortcut);
    }
    act->setToolTip( data->m_tip.isEmpty() ? u8"*" : data->m_tip );
    act->setProperty( "menu_action_index", data->m_index );
    connect( act, &QAction::triggered, this, &menu::on_menu_clicked );
    return act;
}

构造不同的菜单的通用函数

 

m_menu_list.push_back( qlib::menu_action( 0, u8"第一级菜单1", QString(), Qt::ALT|Qt::Key_A, u8"第一级菜单1" ));
m_menu_list.push_back( qlib::menu_action( 1, u8"第一级菜单2", QString(), Qt::ALT|Qt::Key_B ) );
m_menu_list.push_back( qlib::menu_action() );
m_menu_list.push_back( qlib::menu_action( 2, u8"第一级菜单3", QString(), Qt::ALT|Qt::Key_C, u8"第一级菜单3" ));
m_menu_list.push_back( qlib::menu_action( 3, u8"第一级菜单4", QString(), QString(), u8"第一级菜单4" ));
m_menu_list.push_back( qlib::menu_action( 4, u8"第一级菜单5", QString(), Qt::ALT|Qt::Key_E, u8"第一级菜单5" ));
m_menu_list.push_back( qlib::menu_action());
m_menu_list.push_back( qlib::menu_action( 5, u8"第一级菜单6", QString(), Qt::ALT|Qt::Key_F, u8"第一级菜单6" ));
m_menu_list.push_back( qlib::menu_action());
m_menu_list.push_back( qlib::menu_action( 6, u8"第一级菜单7", QString(), Qt::ALT|Qt::Key_G, u8"第一级菜单7" ));
m_menu_list.push_back( qlib::menu_action());
m_menu_list.push_back( qlib::menu_action( 7, u8"第一级菜单8", QString(), Qt::ALT|Qt::Key_H, u8"第一级菜单8" ));

将m_menu_list传递给menu的构造函数.完成菜单的创建.

 

 

【大学】深圳-tc 17:06:22
QTableView的model/view用反射就可以解决支持任何结构体的model通用类

【大学】深圳-tc 17:11:29
qlib::item_model<item_data> *m1 = new qlib::item_model<item_data>( this, {} );
qlib::item_model<item_data*> *m2 = new qlib::item_model<item_data*>( this, {} );
qlib::item_model<std::tuple<QString>> *m3 = new qlib::item_model<std::tuple<QString>>( this, {} );

啥意思没看懂



posted @ 2020-08-26 17:27  sgggr  阅读(237)  评论(0编辑  收藏  举报