Qt中MainWindow類例項
QMainWindow有選單欄,工具欄,狀態列;
可以將QWidget作為QMainWindow的中間部位的一個部件;
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include "myview.h"//在mainwindow上再新增一個視窗
#include <QSystemTrayIcon>//托盤
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
void paintEvent(QPaintEvent *);
void mousePressEvent(QMouseEvent *);
bool event(QEvent *);
QLabel * _label;
MyView * _view;//把要顯示的東西都放在這個視窗部件裡面;mainWindow起到封裝的作用
QMenu * _menu;//用於右鍵彈出選單
QSystemTrayIcon * _icon;//托盤圖示
void slotActivated(QSystemTrayIcon::ActivationReason);
signals:
public slots:
void slotOpen();
void slotSave();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QMenu>//選單類
#include <QMenuBar>//選單欄
#include <QAction>//選單項,是一個可以觸發的東西
#include <QFileDialog>
#include <QDebug>
#include <QToolBar>
#include <QStatusBar>
#include <QPainter>
#include <QPixmap>
#include <QMouseEvent>
#include <QCursor>//滑鼠當前的位置
#include <QIcon>
#include <QEvent>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
/*新增選單*/
QMenuBar * pMenuBar = menuBar();
QMenu *menu = pMenuBar->addMenu("File");
_menu = menu;
QAction *openAction = menu->addAction("&Open", this, SLOT(slotOpen()), QKeySequence::Open);
QAction *saveAction = menu->addAction("&Save", this, SLOT(slotSave()), QKeySequence::Save);
menu->addSeparator();
QAction *closeAction = menu->addAction("&Exit", this, SLOT(close()), QKeySequence::Close);
/*新增工具欄*/
QToolBar *toolBar = this->addToolBar("MyToolBar");//新增一個工具欄
toolBar->addAction(openAction);
toolBar->addAction(saveAction);
toolBar->addAction(closeAction);
/*新增狀態列*/
QStatusBar *pstatusBar = this->statusBar();
pstatusBar->addWidget(_label = new QLabel("OK"));
_label->setText("<font color = red>Processing...</font>");
/*mainwindow中別的控制元件佔用了之後,剩下的區域都是CentralWidget的*/
_view = new MyView;
this->setCentralWidget(_view);
/*托盤*/
_icon = new QSystemTrayIcon;
_icon->setIcon(QIcon("../1.png"));
_icon->setToolTip("This is my tray test");
_icon->show();//顯示該托盤圖示
_icon->setContextMenu(menu);
connect(_icon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(slotActivated(QSystemTrayIcon::ActivationReason)));
}
//這個函式的功能也沒有實現
void MainWindow::slotActivated(QSystemTrayIcon::ActivationReason reason)
{
if (reason == QSystemTrayIcon::Trigger){
if (this->isHidden()) this->show();
else this->isHidden();
}
}
//這個函式的功能沒有實現
bool MainWindow::event(QEvent *event)
{
if(event->type() == QEvent::Close){
return false;
}
return QMainWindow::event(event);
}
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.drawPixmap(QPointF(0, 0),QPixmap("../1.png"));
}
void MainWindow::mousePressEvent(QMouseEvent *ev)
{
if(ev->button() == Qt::RightButton)
_menu->exec(QCursor::pos());
}
void MainWindow::slotSave()
{
QFileDialog::getSaveFileName();
}
void MainWindow::slotOpen()
{
QString strFile = QFileDialog::getOpenFileName();
qDebug() << strFile;
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MainWindow w;
w.setGeometry(300, 130, 700, 500);
w.show();
app.exec();
}
myview.h
#ifndef MYVIEW_H
#define MYVIEW_H
#include <QWidget>
class MyView : public QWidget
{
Q_OBJECT
public:
explicit MyView(QWidget *parent = 0);
void paintEvent(QPaintEvent *);
signals:
public slots:
};
#endif // MYVIEW_H
myview.cpp
#include "myview.h"
#include <QPainter>
MyView::MyView(QWidget *parent) :
QWidget(parent)
{
}
void MyView::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.fillRect(rect(), Qt::red);
}
相關文章
- QT mainwindow UI介面新增工具欄QTAIUI
- Qt 中Socket程式設計例項QT程式設計
- ruby中的類例項變數和例項的例項變數變數
- 例項QT程式 —— Qt單例不規則介面程式QT單例
- java中父類宣告子類例項化Java
- 例項QT程式 —— Qt自繪製小時鐘QT
- Java中內部類的例項化Java
- 類和例項
- Qt繪圖淺析與例項QT繪圖
- 在例項中呼叫 Invoke 型別的類型別
- python中類的建立和例項化Python
- Python中類的建立與使用例項Python
- C#中類的建立和例項化C#
- Python中類建立和例項化過程Python
- vlc qt player 播放器開發例項QT播放器
- python 類和例項Python
- Python 動態新增例項屬性,例項方法,類屬性,類方法Python
- Qt中的多執行緒與執行緒池淺析+例項QT執行緒
- java中String類常用方法的使用與例項Java
- Qt5雙緩衝機制與例項QT
- Dart - 抽象類的例項化Dart抽象
- java多型抽象類例項Java多型抽象
- 理解Python中的類物件、例項物件、屬性、方法Python物件
- Qt自定義訊號槽的使用淺析+例項QT
- Qt5MV自定義模型與例項淺析QT模型
- 基於QT錄製PCM音訊例項詳細QT音訊
- C++ 結構體例項和類例項的初始化C++結構體
- Qt中建立場景並將該創景顯示在視窗上面例項QT
- objective-c 通過類名例項化類Object
- Python中類方法和例項方法有什麼區別?Python
- JVM初探(五):類的例項化JVM
- Python學習:類和例項Python
- c++類的簡單例項C++單例
- 演示中斷處理的例項(例項六)(轉)
- QT中類之間的關係圖QT
- OC底層原理之例項、類物件、元類物件物件
- java內部類之成員內部類例項Java
- Python - 物件導向程式設計 - 類變數、例項變數/類屬性、例項屬性Python物件程式設計變數