Qt——应用程序主窗口
主窗口框架(QMainWindow)
菜单栏(QMenuBar)
- 往菜单中加入
QAction类
的动作对象从而实现功能 - 可添加分隔符进行功能分组,也可用函数
addSeperator()
实现
工具栏(QToolBar)
参数 | 含义 |
---|---|
movable |
工具栏是否可以移动 |
allowedAreas |
允许停靠的位置 |
orientation |
图标排列方向 |
iconSize |
图标大小 |
toolButtonStyle |
图标/相应文本 显示与否和相对位置 |
floatable |
是否可以悬浮 |
中心部件
中间一大块区域,可以放一个Text Edit
Dock部件(QDockWidget)
包含标题栏和内容区域的工具栏
属性 | 含义 |
---|---|
floating |
初始是否悬浮 |
dockWidgetArea |
初始停靠位置 |
features |
一些排列特性 |
allowedAreas |
可以停靠的位置 |
winodwTitle |
dock标题 |
docked |
是否dock |
状态栏(QStatusBar)
要用代码实现:
信息种类 | 信息内容 | 调用方式 | 显示位置 |
---|---|---|---|
临时信息 | 一般的提示信息 | showMessage() | 状态栏最左边 |
正常信息 | 一般想加入的信息 | addWidget()一个QLabel | 状态栏最左边 |
永久信息 | 不变的信息 | addPermanentWidget()一个QLabel | 状态栏最右边 |
自定义菜单(QWidgetAction)
资源文件(qrc)
在资源文件中加入文件后,调用方法:
":/prefix/具体路径"
在.pro
文件中会有声明:
RESOURCES += \
myimg.qrc
富文本
下图为几个类的关系
对于每个空文档,包含一个根框架,此根框架又包含一个空的文本块。而又可以自己添加子框架、文本块、子表格等
-
文本块是一个没有
回车
的段落
//根框架的获取
QTextDocument *document = ui->textEdit->document(); //获取文档对象
QTextFrame *rootFrame = document->rootFrame(); // 获取根框架
QTextFrameFormat format; // 创建框架格式
format.setBorderBrush(Qt::cyan); // 边界颜色
format.setBorder(3); // 边界宽度
rootFrame->setFrameFormat(format); // 框架使用格式
//子框架建立
QTextFrameFormat frameFormat;
frameFormat.setBackground(Qt::lightGray); // 设置背景颜色
frameFormat.setMargin(1); // 设置边距
frameFormat.setPadding(30); // 设置填衬,即框架内部像素裕量
frameFormat.setBorder(3);
frameFormat.setBorderStyle(QTextFrameFormat::BorderStyle_Dotted); //设置边框样式
QTextCursor cursor = ui->textEdit->textCursor(); // 获取光标
cursor.insertFrame(frameFormat); // 在光标处插入框架
代码效果如下:
拖放打开文件(QMimeData和QDrag)
包括拖动(Drag)和放下(Drop)两种操作,数据被拖动的时候会被存储为MIME(Multipurpose Internet Mail Extensions)类型
对于QMimeData类,有如下几种重要的处理函数:
#include <QDebug>
#include <QMimeData>
#include <QDragEnterEvent>
#include <QDropEvent>
//xx.h
protected:
void dragEnterEvent(QDragEnterEvent *event); //拖动事件
void dropEvent(QDropEvent *event); //放下事件
//xx.cpp
void xx::dragEnterEvent(QDragEnterEvent *event){
qDebug() << "find dragEvent!";
if(event->mimeData()->hasUrls()){
event->acceptProposedAction();
qDebug() << "event accepted!";
}
else {
event->ignore();
qDebug() << "event ignored!";
}
}
void xx::dropEvent(QDropEvent *event){
const QMimeData *mimeData = event->mimeData(); //获取MIME数据
if(mimeData->hasUrls()){
QList<QUrl> urlList = mimeData->urls();
qDebug()<<"urlList:"<<urlList;
QString fileName = urlList.at(0).toLocalFile();
qDebug()<<"fileName:"<<fileName;
if(!fileName.isEmpty()){
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly)) return;
QTextStream in(&file);
in.setCodec("utf-8");
ui->textEdit_dragIn->setText(in.readAll());
}
}
}