在qt的mainwindows中写代码实现以下功能:能够使用字体选择组合框更改显示字体 。右键textedit内部,弹出式菜单,能够关闭程序和选择字体。
时间: 2024-02-16 20:03:39 浏览: 78
下面是完整的示例代码,实现了使用字体选择组合框更改显示字体和右键textedit内部弹出式菜单关闭程序和选择字体的功能:
mainwindow.h:
```cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFontComboBox>
#include <QMenu>
#include <QAction>
#include <QFontDialog>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void onFontComboBoxChanged(const QFont &font);
void onTextEditContextMenuRequested(const QPoint &pos);
private:
Ui::MainWindow *ui;
QFontComboBox *fontComboBox;
QMenu *menu;
};
#endif // MAINWINDOW_H
```
mainwindow.cpp:
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 创建QFontComboBox对象
fontComboBox = new QFontComboBox(this);
// 将QFontComboBox对象添加到工具栏中
ui->mainToolBar->addWidget(fontComboBox);
// 连接QFontComboBox对象的currentFontChanged()信号到槽函数
connect(fontComboBox, &QFontComboBox::currentFontChanged, this, &MainWindow::onFontComboBoxChanged);
// 创建QMenu对象
menu = new QMenu(this);
// 设置textedit的上下文菜单策略为Qt::CustomContextMenu
ui->textEdit->setContextMenuPolicy(Qt::CustomContextMenu);
// 连接textedit的customContextMenuRequested()信号到槽函数
connect(ui->textEdit, &QTextEdit::customContextMenuRequested, this, &MainWindow::onTextEditContextMenuRequested);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onFontComboBoxChanged(const QFont &font)
{
// 更改textedit中的字体
ui->textEdit->setFont(font);
}
void MainWindow::onTextEditContextMenuRequested(const QPoint &pos)
{
// 清空QMenu对象中的QAction对象
menu->clear();
// 添加关闭程序和选择字体的QAction对象到QMenu对象中
QAction *closeAction = new QAction(tr("Close"), this);
QAction *fontAction = new QAction(tr("Font"), this);
connect(closeAction, &QAction::triggered, this, &MainWindow::close);
connect(fontAction, &QAction::triggered, this, [=]() {
bool ok;
QFont font = QFontDialog::getFont(&ok, ui->textEdit->font(), this);
if (ok) {
ui->textEdit->setFont(font);
}
});
menu->addAction(closeAction);
menu->addAction(fontAction);
// 显示QMenu对象
menu->exec(ui->textEdit->viewport()->mapToGlobal(pos));
}
```
在MainWindow的构造函数中,创建了一个QFontComboBox对象,并将其添加到工具栏中。然后,连接QFontComboBox对象的currentFontChanged()信号到一个槽函数,用于更改textedit中的字体。
在构造函数中,还创建了一个QMenu对象,并设置了textedit的上下文菜单策略为Qt::CustomContextMenu。然后,连接textedit的customContextMenuRequested()信号到一个槽函数。在槽函数中,清空QMenu对象中的QAction对象,并添加关闭程序和选择字体的QAction对象。最后,显示QMenu对象。
需要注意的是,使用mapToGlobal()函数将textedit中的坐标转换为屏幕坐标,以正确显示QMenu对象。
阅读全文