相同的操作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, {} );
啥意思没看懂