本章代码见文末链接
主窗口框架
新建Qt Wisgets项目mymainwindow,类名默认MainWindow,基类默认QMainWindow
更改文字如图,如果中文无法直接输入,可以试试复制粘贴
“动作编辑器”中(默认在右下角),找到新建的动作
右键然后添加工具栏,objectName改为mainToolBar
将“动作编辑器”的“新建文件(&N)”文字拖到横线上,会有一个红色竖线提示位置正确
运行结果:(alt+F快捷键)
添加资源
使用图片logo(ui界面)
在项目的文件目录mymainwindow中新建文件夹images,放入图片
右键项目,选择“Add new…”,命名为myimages
新建后默认到如下打开qrc的界面,添加前缀改为如下,在选择添加文件,选择刚刚新建的放入图片的images文件夹,然后ctrl+S
![在这里插入图片描述](https://img-blog.csdnimg.cn/7ce3fb4ef44e4755b5ec8645eb1b5c9a.png
在ui界面双击“新建文件”动作(之前拖动的文字),点击“图标”后面的三个点,选择图片
在“Shortcut”后单击,按下ctrl+N,设为快捷键
运行结果:(按alt+F)
查看qrc资源文件的内容:
还有pro文件也已经增加了
使用图片logo(代码方式)
再以代码形式使用图片
//mainwindow.cpp构造函数中添加
#include<QMenu>
#include<QAction>
#include<QIcon>
QMenu *editMenu=ui->menubar->addMenu(tr("编辑(&E)"));
QAction *action_Open=editMenu->addAction(QIcon(":/image/images/bat.png"),tr(" 打开(&O)"));
action_Open->setShortcut(QKeySequence("Ctrl+O"));
ui->mainToolBar->addAction(action_Open);
运行结果:
菜单栏
//继续添加构造函数
#include<QActionGroup>
QActionGroup *group=new QActionGroup(this);
QAction *action_L=group->addAction(tr("Left(&L)"));
action_L->setCheckable(true);
QAction *action_R=group->addAction(tr("Right(&R)"));
action_R->setCheckable(true);
QAction *action_C=group->addAction(tr("Center(&C)"));
action_C->setCheckable(true);
action_L->setChecked(true);//指定为选中状态
editMenu->addSeparator();
editMenu->addAction(action_L);
editMenu->addAction(action_R);
editMenu->addAction(action_C);
运行结果:
工具栏
//继续添加构造函数
#include<QToolButton>
#include<QSpinBox>
QToolButton *toolBtn=new QToolButton(this);
toolBtn->setText(tr("Color"));
QMenu *colorMenu=new QMenu(this);
colorMenu->addAction(tr("Red"));
colorMenu->addAction(tr("Green"));
toolBtn->setMenu(colorMenu);
toolBtn->setPopupMode(QToolButton::MenuButtonPopup);
ui->mainToolBar->addWidget(toolBtn);
QSpinBox *spinBox=new QSpinBox(this);
ui->mainToolBar->addWidget(spinBox);
运行结果:
中心部件
.ui界面拖用MDI Area,右键“新建文件”动作,选择“转到槽”的triggered()
//自动转到mainwindow.cpp的on_action_N_triggered()槽
#include<QTextEdit>
#include<QMdiSubWindow>
QTextEdit *edit=new QTextEdit(this);
QMdiSubWindow *child=ui->mdiArea->addSubWindow(edit);
child->setWindowTitle(tr("Multi-File-Edit"));
child->show();
运行结果:ctrl+N,可输入文字
Dock部件
ui界面拖用Dock Widget,再拖入Push Button、Font Combo Box
Dock Widget的windowTitle属性改为“工具箱”
在文件菜单添加“显示Dock”菜单项,动作编辑器中右键“显示Dock”转到槽triggered()
//自动转到mainwindow.cpp的on_action_Dock_triggered()槽
#include<QDockWidget>
ui->dockWidget->show();
运行结果:
点击“工具箱”后面的两个方框,dock可以悬浮,拖动可以再次固定到上下左右;
叉掉后再点击“显示dock”又出现
状态栏
//继续添加构造函数
#include<QLabel>
ui->statusbar->showMessage(tr("Welcome!"),3000);
QLabel *permanent=new QLabel(this);
permanent->setFrameStyle(QFrame::Box|QFrame::Sunken);
permanent->setText("www.qter.org");
ui->statusbar->addPermanentWidget(permanent);
运行结果:“Welcome!”显示3秒,“www.qter.org”永久显示
自定义菜单
新建Qt Widgets项目myaction,其余默认
右键项目名,新建C++类如下
运行结果:输入后回车,显示文字在文本编辑器中
富文本处理
新建Qt Widgets项目myrichtext,其余默认
直接敲代码,然后运行(代码见文末链接)
运行结果:
点击“Frame”,Debug处显示如下:
点击“textBlock”,Debug处显示如下:
若点击font(在哪里点击,就出现在哪个框中)
插入表格、列表、图片(图片放到myrichtext文件夹,并在槽中改名即可)
void MainWindow::insertImage()
{
QTextImageFormat format;
format.setName("../myrichtext/QQ.png");
ui->textEdit->textCursor().insertImage(format);
}
“查找”功能在Debug处显示位置
右键项目名,新建C++类mysyntaxhighlighter,基类选择QSyntaxHighlighter,如下:
输入单词“char”,会高亮显示
拖放操作
使用拖放打开文件
已经解决:拖放到主窗口,显示乱码
//mainwindow.cpp中
void MainWindow::dropEvent(QDropEvent *event)
{
const QMimeData *mimeData=event->mimeData();
if(mimeData->hasUrls()){
QList<QUrl>urlList=mimeData->urls();
QString fileName=urlList.at(0).toLocalFile();
if(!(fileName.isEmpty())){
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QFile file(fileName);
if(!(file.open(QIODevice::ReadOnly))) return;
QTextStream in(&file);
in.setCodec(codec);
ui->textEdit->setText(in.readAll());
}
}
}
运行结果:拖放到文本编辑器中,显示路径
拖放到主窗口,显示文本内容
自定义拖放操作
直接敲代码,然后运行(代码见文末链接)
//在三个槽中保留同一个event的Action,即可选择拖动/复制功能
void MainWindow::dragEnterEvent(QDragEnterEvent *event) // 拖动进入事件
void MainWindow::dragMoveEvent(QDragMoveEvent *event) // 拖动事件
void MainWindow::dropEvent(QDropEvent *event) // 放下事件
//下面两行自选一行,另一行注释掉
// event->setDropAction(Qt::MoveAction);
event->setDropAction(Qt::CopyAction);
运行结果:
MoveAction:拖动有阴影
CopyAction:拖动有阴影,松开即复制
打印文档
运行结果:
点击“预览”
点击“生成”,(以Release模式运行),在build…Realease文件夹中找到demo.pdf
本章代码及使用方法
本章代码
遇到各种提示都点“OK”或者“Yes”(主要是关于版本的兼容性提示)
遇到如下问题的解决方法:
在“项目”模式的“Build & Run”点击“绿色加号”(任选一个),再回到“编辑”模式
直接点击“绿色箭头”即可运行
该方法同样适用于打开Qt Creator自带的“欢迎”界面的案例项目