按以下要求写qt程序,包括mainwindows.h和mainwindows.cpp:(1)按下鼠标左键并拖动鼠标,按钮随着鼠标的光标移动,同时在状态栏显示鼠标以用户区坐标系表示的位置坐标;(2) 当输入焦点在窗口上时,按下键盘上的Ctrl同时按下M的时候,窗口最大化显示;(3)做弹出式菜单“窗口”,下面三个菜单项“最大”“最小”“普通”,要求菜单项需要有图标,图标自定,要求使用qt的资源;实现三个菜单项对应的功能;(4)在工具栏上添加上述三个菜单项所对应的Action。(5)在窗口上双击鼠标左键,窗口最大化,双击右键,由最大化恢复
时间: 2023-12-11 10:05:07 浏览: 35
以下是 mainwindows.h 文件的代码:
```
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMouseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void keyPressEvent(QKeyEvent *event);
void mouseDoubleClickEvent(QMouseEvent *event);
private slots:
void on_actionMaximize_triggered();
void on_actionMinimize_triggered();
void on_actionNormal_triggered();
private:
Ui::MainWindow *ui;
QAction *maximizeAction;
QAction *minimizeAction;
QAction *normalAction;
};
#endif // MAINWINDOW_H
```
以下是 mainwindows.cpp 文件的代码:
```
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QMenuBar>
#include <QToolBar>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 添加菜单栏
QMenu *windowMenu = new QMenu(tr("&Window"), this);
menuBar()->addMenu(windowMenu);
// 添加最大化菜单项
maximizeAction = new QAction(QIcon(":/icons/maximize.png"), tr("&Maximize"), this);
maximizeAction->setShortcut(tr("Ctrl+M"));
windowMenu->addAction(maximizeAction);
connect(maximizeAction, &QAction::triggered, this, &MainWindow::on_actionMaximize_triggered);
// 添加最小化菜单项
minimizeAction = new QAction(QIcon(":/icons/minimize.png"), tr("&Minimize"), this);
windowMenu->addAction(minimizeAction);
connect(minimizeAction, &QAction::triggered, this, &MainWindow::on_actionMinimize_triggered);
// 添加普通菜单项
normalAction = new QAction(QIcon(":/icons/normal.png"), tr("&Normal"), this);
windowMenu->addAction(normalAction);
connect(normalAction, &QAction::triggered, this, &MainWindow::on_actionNormal_triggered);
// 添加工具栏
QToolBar *toolBar = new QToolBar(tr("Window"), this);
addToolBar(toolBar);
toolBar->addAction(maximizeAction);
toolBar->addAction(minimizeAction);
toolBar->addAction(normalAction);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
ui->pushButton->move(event->pos());
statusBar()->showMessage(QString("X: %1, Y: %2").arg(event->pos().x()).arg(event->pos().y()));
}
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton) {
ui->pushButton->move(event->pos());
statusBar()->showMessage(QString("X: %1, Y: %2").arg(event->pos().x()).arg(event->pos().y()));
}
}
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_M && event->modifiers() == Qt::ControlModifier) {
setWindowState(windowState() ^ Qt::WindowMaximized);
}
}
void MainWindow::mouseDoubleClickEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
setWindowState(windowState() | Qt::WindowMaximized);
} else if (event->button() == Qt::RightButton) {
setWindowState(windowState() & ~Qt::WindowMaximized);
}
}
void MainWindow::on_actionMaximize_triggered()
{
setWindowState(windowState() | Qt::WindowMaximized);
}
void MainWindow::on_actionMinimize_triggered()
{
setWindowState(windowState() | Qt::WindowMinimized);
}
void MainWindow::on_actionNormal_triggered()
{
setWindowState(windowState() & ~(Qt::WindowMaximized | Qt::WindowMinimized));
}
```
注意:本程序使用了三个图片资源文件,包括"maximize.png"、"minimize.png"和"normal.png",需要将这些图片放在 Qt 项目中的资源文件中。