qt完成以下要求:9.能够使用字体选择组合框更改显示字体 10.右键弹出式菜单,能够关闭程序和选择字体。
时间: 2024-02-16 09:02:50 浏览: 165
Qml字体选择对话框QmlFontDialog.7z
5星 · 资源好评率100%
以下是一个示例程序,演示了如何实现这些要求:
```cpp
#include <QtWidgets>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
// 创建字体选择组合框
m_fontComboBox = new QFontComboBox();
connect(m_fontComboBox, &QFontComboBox::currentFontChanged, this, &MyWidget::onFontChanged);
// 创建标签
m_label = new QLabel(tr("Hello, world!"));
// 创建右键弹出式菜单
m_menu = new QMenu();
QAction *closeAction = m_menu->addAction(tr("Close"));
connect(closeAction, &QAction::triggered, this, &QWidget::close);
m_menu->addSeparator();
m_menu->addAction(tr("Choose font"), this, &MyWidget::onChooseFont);
// 将右键弹出式菜单设置为标签的上下文菜单
m_label->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_label, &QWidget::customContextMenuRequested, this, &MyWidget::onContextMenuRequested);
// 创建垂直布局,并将组合框和标签添加到其中
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(m_fontComboBox);
layout->addWidget(m_label);
setLayout(layout);
}
private:
QFontComboBox *m_fontComboBox;
QLabel *m_label;
QMenu *m_menu;
void onFontChanged(const QFont &font)
{
// 当字体选择组合框中的字体更改时,将标签的字体设置为新字体
m_label->setFont(font);
}
void onChooseFont()
{
// 弹出字体选择对话框,并将标签的字体设置为所选字体
bool ok;
QFont font = QFontDialog::getFont(&ok, m_label->font(), this);
if (ok) {
m_label->setFont(font);
}
}
void onContextMenuRequested(const QPoint &pos)
{
// 在标签位置弹出右键弹出式菜单
m_menu->exec(m_label->mapToGlobal(pos));
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MyWidget widget;
widget.show();
return app.exec();
}
```
该程序创建了一个字体选择组合框和一个标签,当选择组合框中的字体时,标签的字体会更改为所选字体。右键单击标签时,会弹出一个菜单,允许用户选择字体或关闭程序。
阅读全文