一. 工具栏
工具栏是应用程序中集成各种功能实现快捷键使用的一个区域,可以有多个, 也可以没有。它是一个可移动的组件,其元素是各种窗口组件,通常以图标按钮的方式存在,提供常用功能的快捷访问,例如保存、打印、撤销等操作。
工具栏示意图如下:
二. 代码创建&使用工具栏
1. 创建并添加工具栏
Qt 通过 QToolBar 实现工具栏功能
使用 QMainWindow 的 addToolBar()
方法添加工具栏
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建工具栏
QToolBar *toolbar1 = new QToolBar(this);
QToolBar *toolbar2 = new QToolBar(this);
//添加工具栏
this->addToolBar(toolbar1);
this->addToolBar(toolbar2);
}
运行结果如下:
2. 添加快捷项并连接信号与槽函数
因为工具栏其实是菜单栏的“快捷方式”,所以Qt将菜单栏的菜单项和工具栏的快捷项都抽象成同一个类 QAction
QToolBar 添加快捷项的方法为 addAction()
代码示例:将编辑栏作中心控件,两个工具栏分别有一个保存和加载两个快捷项,保存会将编辑栏中的文本保存在特定路径下;加载会将指定文件的内容加载到编辑栏中
- 创建并添加快捷项
//创建快捷项
QAction *file_save = new QAction("保存", this);
QAction *file_load = new QAction("加载", this);
//添加快捷项,每个工具栏各一个
toolbar1->addAction(file_save);
toolbar2->addAction(file_load);
- 给快捷项添加图标,Qt 管理图片资源的方式参看 【Qt】QWidget 的
qrc文件
部分
file_save->setIcon(QIcon(":/save.png"));
file_load->setIcon(QIcon(":/load.png"));
注意:
因为快捷项所占空间较小,图标会将文本挤占
- 添加编辑栏作为中心控件
因为编辑栏后续要在槽函数中使用,所以需要声明为成员变量,方便访问
mainwindow.h
声明
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QTextEdit *text;//编辑栏
};
mainwindow.cpp的构造函数
定义
text = new QTextEdit();//定义
this->setCentralWidget(text);//添加中心控件
text->setPlaceholderText("请输入内容...");//设置提示词
- 连接信号与槽并实现槽函数
mainwindow.h
声明槽函数
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
//声明槽函数
public slots:
void save();
void load();
private:
Ui::MainWindow *ui;
QTextEdit *text;
};
mainwindow.cpp
实现
在MainWindow构造函数中连接信号与槽函数
//连接信号与槽函数
connect(file_save, &QAction::triggered, this, &MainWindow::save);
connect(file_load, &QAction::triggered, this, &MainWindow::load);
槽函数具体实现
void MainWindow::save()
{
QFileDialog fileDialog;
//getSaveFileName会弹出一个文件窗口,路径为第三个参数,可输入保存文件的名字
QString filename = fileDialog.getSaveFileName(this, "保存文件", "C:/Users/Lenovo/Desktop/code/1/");
//打开文件
std::ofstream ofs(filename.toStdString().c_str());
if(ofs.is_open() == false)
{
qDebug() << "保存文件打开失败";
return;
}
//获取编辑栏文本,并写入
QString content = text->toPlainText();
ofs << content.toStdString();
ofs.close();
text->clear();//清空编辑栏内容
}
void MainWindow::load()
{
QFileDialog fileDiaglog;
//获取要加载的文件名
QString filename = fileDiaglog.getOpenFileName(this, "加载文件", "C:/Users/Lenovo/Desktop/code/1/");
//打开文件
std::ifstream ifs(filename.toStdString().c_str());
if(ifs.is_open() == false)
{
qDebug() << "加载文件打开失败";
return;
}
std::string line, content;
while(getline(ifs, line))
{
content += line;
content += "\n";
}
ifs.close();
text->setPlainText(QString::fromStdString(content));
}
运行结果如下:
点击保存的图标,弹出窗口,输入文件名,点击“保存”,保存后还会清空编辑栏的文本
点击加载图标,弹出窗口,选择要打开的文件,此处选择刚保存的 text.txt
成功将文本内容回显会编辑栏
3. 设置停靠位置
工具栏停靠位置的设置有两种方式。
- 添加时指定停靠位置
- 通过QToolBar 提供的
setAllowedAreas()
设置
方式一:创建时同时指定停靠位置
在添加工具栏时,其默认位置是窗口的最上面,其可停靠的区域由 QToolBar 的 allowAreas()
决定,其中可设置的位置包括
Qt::LeftToolBarArea
停靠在左侧Qt::RightToolBarArea
停靠在右侧Qt::TopToolBarArea
停靠在顶部Qt::BottomToolBarArea
停靠在底部Qt::AllToolBarAreas
以上四个位置都可以
示例:
QToolBar *toolbar1 = new QToolBar(this);
QToolBar *toolbar2 = new QToolBar(this);
//添加工具栏并设置其停靠位置
this->addToolBar(Qt::TopToolBarArea, toolbar1);//顶部
this->addToolBar(Qt::LeftToolBarArea, toolbar2);//左侧
运行结果如下:
方式二:使用 QToolBar 提供的 setAllowedAreas()
设置停靠位置
QToolBar *toolbar1 = new QToolBar(this);
QToolBar *toolbar2 = new QToolBar(this);
//添加工具栏
this->addToolBar(toolbar1);
this->addToolBar(toolbar2);
//通过setAllowedAreas设置可停靠位置
toolbar1->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);//只允许停靠在顶部和底部
toolbar2->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);//只允许停靠在左右侧
注意:
此处是设置可停靠位置
,不是初始停靠位置,因为工具栏可通过拖拽改变停靠位置
4. 设置浮动属性
工具栏其实不只可以在顶部、底部和左右两侧,还可以在中间部分,此时就是处于浮动状态
工具栏的浮动属性可以通过 QToolBar 提供的 setFloatable()
设置,其原型为 void setFloatable(bool floatable)
设置为 true
时,可浮动
设置为 false
时,不可浮动
示例:
QToolBar *toolbar1 = new QToolBar(this);
QToolBar *toolbar2 = new QToolBar(this);
//添加工具栏
this->addToolBar(toolbar1);
this->addToolBar(toolbar2);
//设置是否可浮动
toolbar1->setFloatable(true);
toolbar2->setFloatable(false);
5. 设置移动属性
设置工具栏的移动属性可以通过 QToolBar 提供的 setMovable()
设置,其原型为 void setMovable(bool movable)
设置为 true
时,可移动
设置为 false
时,不可移动
注意:
若设置工具栏为不可移动状态,则设置其停靠位置的操作就不会生效,所以设置工具栏的移动属性类似于总开关的效果
QToolBar *toolbar1 = new QToolBar(this);
QToolBar *toolbar2 = new QToolBar(this);
//添加工具栏
this->addToolBar(toolbar1);
this->addToolBar(toolbar2);
//设置是否可移动
toolbar1->setMovable(true);
toolbar2->setMovable(false);
结束语
感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。