QMainWindow简介及快捷方式

整体布局

QMainWindow经常作为应用程序主窗体,其布局如下图

大致可以分为标题栏、菜单栏、工具栏、状态栏、dockwidgets(铆接部件)、centralwidget


标题栏

标题栏可以通过

    setWindowTitle("test V1.0");

设置标题,同时可以进行版本显示。


菜单栏

菜单栏的框架如下

默认创建的QMainWindow存在一个默认的菜单栏menuBar(),可以通过如下代码获取

QMenuBar *MenuBar = menuBar();

或者删除默认菜单栏,自己新建一个MenuBar,通过setMenuBar()函数设置为主窗体的菜单栏,

    //创建菜单栏
    MenuBar = new QMenuBar(this);
    setMenuBar(MenuBar);

随后则需要通过addMenu添加不同的菜单。

    //第一个菜单 会话
    QMenu *session = new QMenu(g_C2Q("会话(S)"),this);
    MenuBar->addMenu(session);

此时,仅仅为菜单点击并无任何反应,需要在添加的菜单中添加二级菜单及不同的Action;

    QMenu *newWidget = new QMenu(g_C2Q("新建会话(N)"),MenuBar);
    //会话菜单下动作
    QAction *newact = session->addMenu(newWidget);
    QAction *act_tab =session->addAction(g_C2Q("新建标签页(T)"));
    QAction *act = session->addAction(g_C2Q("报文"));

此时会话菜单中已经有二级菜单和2个QAction了,我们可以通过QAction的

QAction::triggered

信号连接槽函数,从而实现点击后的操作。

注意:可以看到addMenu()函数返回值为QAction *,所以可以对菜单栏下的菜单以及子菜单也绑定的槽函数,实现相应的功能


状态栏

和菜单栏一样,默认存在一个statusBar(),也可以删除后新建一个状态栏。

状态栏主要通过showMessage()函数显示相关信息。

    //状态栏
    statusBar = new QStatusBar(this);
    statusBar->showMessage(QString("status Bar"),2000);

第一个参数是显示内容,第二个参数是显示持续时间。默认为0,表示一直显示。

此外,statusBar还可以通过addWidget()添加控件。

    QPushButton *btn = new QPushButton("left");
    statusBar->addWidget(btn,2);
    QPushButton *btn1 = new QPushButton("right");
    statusBar->addWidget(btn1,1);
    setStatusBar(statusBar);

需要注意的是,如果设置了showMessage(),则控件不会显示。


工具栏

工具栏的框架结构与菜单栏类似,不过少了中间的menu,直接添加QAction,

此外,由于工具栏为区域,所以可以添加多个。并且可以沿着主窗体四周放置。

TBar_Edit->setAllowedAreas(Qt::LeftToolBarArea);

允许位置可以通过AllowedAreas属性设置。


DockWidgets

铆接部件,可以通过addDockWidget添加到主控界面上。

    //铆接部件
    dock = new QDockWidget(g_C2Q("报文"),this);
    QTextEdit *edit = new QTextEdit(dock);
    dock->setWidget(edit);
    addDockWidget(Qt::BottomDockWidgetArea,dock);

实现 后可以将dockwidget放在主控界面内,也可以悬停与界面外,两者都可以有焦点


CentralWidget

关于CentralWidget没什么好说的,就是用来放置主空间的地方。

对于上述内容的还有一点共性:所有只能添加一个的(menuBar、StatusBar),都是使用set设置,而可以添加多个的(DockWidgets、ToolBars),则使用Add添加。


快捷方式

关于快捷方式,是通过QAction的函数


void setShortcut(const QKeySequence &shortcut)

其中QKeySequence可以是

但是需要注意的是:

第一,并不是所有的按键都是有效的,因为操作系统和环境不同,同样的按键可能不起作用,所以建议使用以上第三种默认的方式。

第二,对于menuBar来说,可以通过‘&’实现快捷键。

QAction *mact = new QAction("&set");

则在打开对应菜单后,按s即可触发。但是这个仅对英文且是menuBar而言,对于中文和toolBar则不起作用。

对于中文可以在其后用(&s)这样的方式来引入alt+s的快捷方式。

第三,对于默认快捷方式我们通常需要点击菜单,然后再点击快捷键,才能触发。但是其实这个属性是可以设置的,

act_open->setShortcutContext(Qt::ApplicationShortcut);

通过ShortcutContext属性可以将快捷键设置为四种不同的模式,其中Qt::ApplicationShortcut表示应用窗体活跃状态下都可以触发。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Python中,可以使用QtCore.QUrl和QtGui.QIcon类来创建文件快捷方式,并将其添加到UI中。下面是一个简单的示例代码,演示了如何添加一个名为"shortcut.lnk"的文件快捷方式到UI上: ```python from PyQt5 import QtCore, QtGui, QtWidgets class MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() # 创建一个 QAction,用于添加到菜单或工具栏上 shortcut_action = QtWidgets.QAction("Shortcut", self) shortcut_action.triggered.connect(self.add_shortcut) # 创建一个菜单栏和一个工具栏,并将 QAction 添加到其中 menu_bar = self.menuBar() file_menu = menu_bar.addMenu("File") file_menu.addAction(shortcut_action) tool_bar = self.addToolBar("Tools") tool_bar.addAction(shortcut_action) def add_shortcut(self): # 创建一个文件快捷方式 url = QtCore.QUrl.fromLocalFile("/path/to/shortcut/target") icon = QtGui.QIcon.fromTheme("shortcut") shortcut_file = QtGui.QFileIconProvider().icon(QtWidgets.QStyle.SP_FileIcon).pixmap(64, 64) shortcut_file.addPixmap(icon.pixmap(64, 64), QtGui.QIcon.Normal, QtGui.QIcon.On) # 将文件快捷方式添加到 UI 中 desktop = QtWidgets.QApplication.desktop() desktop_path = desktop.absolutePath() shortcut_path = desktop_path + "/shortcut.lnk" if shortcut_file.save(shortcut_path): QtWidgets.QMessageBox.information(self, "Shortcut", "Shortcut added successfully.") ``` 在上述示例代码中,我们创建了一个名为"Shortcut"的 QAction,并将其添加到菜单栏和工具栏中。当用户单击该 QAction 时,将调用 add_shortcut() 方法创建一个文件快捷方式。在该方法中,我们使用 QtCore.QUrl 类创建了一个指向目标文件的 URL,并使用 QtGui.QIcon 类创建一个文件图标。然后,我们使用 QtGui.QFileIconProvider 类创建了一个空的文件快捷方式,并在其中添加了图标和 URL。最后,我们将文件快捷方式保存到桌面上,并显示一个消息框来通知用户添加成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值