Qt——应用程序主窗口


主窗口框架(QMainWindow)


菜单栏(QMenuBar)

Qt——应用程序主窗口_第1张图片

  • 往菜单中加入QAction类的动作对象从而实现功能
  • 可添加分隔符进行功能分组,也可用函数addSeperator()实现

工具栏(QToolBar)

Qt——应用程序主窗口_第2张图片

参数 含义
movable 工具栏是否可以移动
allowedAreas 允许停靠的位置
orientation 图标排列方向
iconSize 图标大小
toolButtonStyle 图标/相应文本 显示与否和相对位置
floatable 是否可以悬浮

中心部件

中间一大块区域,可以放一个Text Edit

Dock部件(QDockWidget)

包含标题栏内容区域的工具栏
Qt——应用程序主窗口_第3张图片

属性 含义
floating 初始是否悬浮
dockWidgetArea 初始停靠位置
features 一些排列特性
allowedAreas 可以停靠的位置
winodwTitle dock标题
docked 是否dock

状态栏(QStatusBar)

要用代码实现:

信息种类 信息内容 调用方式 显示位置
临时信息 一般的提示信息 showMessage() 状态栏最左边
正常信息 一般想加入的信息 addWidget()一个QLabel 状态栏最左边
永久信息 不变的信息 addPermanentWidget()一个QLabel 状态栏最右边

自定义菜单(QWidgetAction)


资源文件(qrc)


Qt——应用程序主窗口_第4张图片
在资源文件中加入文件后,调用方法:

":/prefix/具体路径"

.pro文件中会有声明:

RESOURCES += \
    myimg.qrc

富文本


下图为几个类的关系
Qt——应用程序主窗口_第5张图片
对于每个空文档,包含一个根框架,此根框架又包含一个空的文本块。而又可以自己添加子框架文本块子表格

  • 文本块是一个没有回车的段落
    Qt——应用程序主窗口_第6张图片
//根框架的获取
    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);                         // 在光标处插入框架

代码效果如下:
Qt——应用程序主窗口_第7张图片


拖放打开文件(QMimeData和QDrag)


包括拖动(Drag)和放下(Drop)两种操作,数据被拖动的时候会被存储为MIME(Multipurpose Internet Mail Extensions)类型

对于QMimeData类,有如下几种重要的处理函数:
Qt——应用程序主窗口_第8张图片

#include 
#include 
#include 
#include 

//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());
        }
    }
}

你可能感兴趣的:(Qt学习入门,Qt,入门学习,应用程序主窗口)