首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

Qt中停泊窗口的实现

2012-07-29 
Qt中停靠窗口的实现停靠窗口作为主窗口的一部分,可以停靠、浮动、显示隐藏等。现在很多软件都具有可停靠窗口

Qt中停靠窗口的实现

Qt中停泊窗口的实现

 

Qt中停泊窗口的实现

 

    停靠窗口作为主窗口的一部分,可以停靠、浮动、显示隐藏等。现在很多软件都具有可停靠窗口

    可停靠位置:

Qt中停泊窗口的实现

 

Qt中停泊窗口的实现

 

//mydockwidget.h#ifndef MYDOCKWIDGETDEMO_H#define MYDOCKWIDGETDEMO_H#include <QMainWindow>class QAction;class QMenu;class QToolBar;class QStatusBar;class QDockWidget;class QTextEdit;class MyDockWidgetDemo : public QMainWindow{    Q_OBJECTpublic:    explicit MyDockWidgetDemo(QWidget *parent = 0);signals:public slots:private slots:    void newSlot();    void saveSlot();    void aboutSlot();private:    void createActions();        //创建动作    void createMenus();          //创建菜单    void createToolBars();      //创建工具条    void createStatusBars();    //创建状态栏    void createDockWidget();    //创建可停靠窗口    QAction *newAct;    QAction *saveAct;    QAction *quitAct;    QAction *aboutAct;    QMenu *fileMenu;    QMenu *viewMenu;            //viewMenu主要控制QDockWidget控件的显示和隐藏    QMenu *helpMenu;    QToolBar *fileToolBar;    QToolBar *viewToolBar;      //viewToolBar主要控制QDockWidget控件的显示和隐藏    QToolBar *helpToolBar;    QTextEdit *textEdit;};#endif // MYDOCKWIDGETDEMO_H


 

//mydockwidget.h#include "mydockwidgetdemo.h"#include <QAction>#include <QMenu>#include <QMenuBar>#include <QToolBar>#include <QStatusBar>#include <QDockWidget>#include <QTextEdit>#include <QMessageBox>#include <QCalendarWidget>MyDockWidgetDemo::MyDockWidgetDemo(QWidget *parent) :    QMainWindow(parent){    //创建一个QTextEdit控件,作为主窗口    textEdit = new QTextEdit;    this->setCentralWidget(textEdit);    createActions();    createMenus();    createToolBars();    createStatusBars();createDockWidget();this->setWindowTitle(tr("停靠窗口"));}void MyDockWidgetDemo::newSlot(){    //清空QTextEdit控件中的内容    textEdit->clear();}void MyDockWidgetDemo::saveSlot(){    QMessageBox::warning(this, tr("事件"), tr("你触发了保存文件事件"),                         QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);}void MyDockWidgetDemo::aboutSlot(){    QMessageBox::warning(this, tr("关于"), tr("欢迎交流。"),                         QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);}void MyDockWidgetDemo::createActions(){    newAct = new QAction(tr("新建"), this);    newAct->setShortcut(tr("Ctrl + N"));    connect(newAct, SIGNAL(triggered()), this, SLOT(newSlot()));    saveAct = new QAction(tr("保存"), this);    saveAct->setShortcut(tr("Ctrl + S"));    connect(saveAct, SIGNAL(triggered()), this, SLOT(saveSlot()));    quitAct = new QAction(tr("退出"), this);    quitAct->setShortcut(tr("Ctrl + Q"));    connect(quitAct, SIGNAL(triggered()), this, SLOT(close()));    aboutAct = new QAction(tr("关于"), this);    aboutAct->setShortcut(tr("Ctrl + A"));    connect(aboutAct, SIGNAL(triggered()), this, SLOT(aboutSlot()));}void MyDockWidgetDemo::createMenus(){    fileMenu = this->menuBar()->addMenu(tr("文件"));    fileMenu->addAction(newAct);    fileMenu->addAction(saveAct);    fileMenu->addAction(quitAct);    viewMenu = this->menuBar()->addMenu(tr("视图"));    helpMenu = this->menuBar()->addMenu(tr("帮助"));    helpMenu->addAction(aboutAct);}void MyDockWidgetDemo::createToolBars(){    //给应用程序添加工具条    fileToolBar = this->addToolBar(tr("文件"));    fileToolBar->addAction(newAct);    fileToolBar->addAction(saveAct);    fileToolBar->addAction(quitAct);    viewToolBar = this->addToolBar(tr("视图"));    helpToolBar = this->addToolBar(tr("帮助"));    helpToolBar->addAction(aboutAct);}void MyDockWidgetDemo::createStatusBars(){    //设置应用程序的状态栏    statusBar()->showMessage(tr("准备"));}void MyDockWidgetDemo::createDockWidget(){    //设置主窗体的第一个QDockWidget    QDockWidget *firstDockWidget = new QDockWidget(this);    //设置第一个QDockWidget的窗口名称    firstDockWidget->setWindowTitle(tr("日期"));    //设置第一个QDockWidget的可停靠区域,全部可停靠    firstDockWidget->setAllowedAreas(Qt::AllDockWidgetAreas);    //设置第一个QDockWidget内的控件并设置该控件的属性    QCalendarWidget *calendar = new QCalendarWidget;    calendar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);    calendar->setGridVisible(true);    //将QCalendarWidget控件设置成QDockWidget的主控件 使其能随窗口大小改变而改变    firstDockWidget->setWidget(calendar);    //向主窗体中添加第一个QDockWidget控件 第一个参数表示初始显示的位置 第二个参数是要添加的QDockWidget控件    this->addDockWidget(Qt::RightDockWidgetArea, firstDockWidget);    //向菜单和工具栏中添加第一个QDockWidget的显示和隐藏动作    viewMenu->addAction(firstDockWidget->toggleViewAction());    viewToolBar->addAction(firstDockWidget->toggleViewAction());    //设置第二个QDockWidget    QDockWidget *secondDockWidget = new QDockWidget(this);    secondDockWidget->setWindowTitle(tr("About Me"));    secondDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::BottomDockWidgetArea);    QTextEdit *myInfo = new QTextEdit(tr("<br>欢迎交流</br><br>博客地址:hhtp://blog.csdn.net/qiurisuixiang</br>"));    secondDockWidget->setWidget(myInfo);    this->addDockWidget(Qt::BottomDockWidgetArea, secondDockWidget);    //向菜单和工具栏中添加第一个QDockWidget的显示和隐藏动作    viewMenu->addAction(secondDockWidget->toggleViewAction());    viewToolBar->addAction(secondDockWidget->toggleViewAction());}


 

//main.cpp#include <QApplication>#include <QTextCodec>#include "mydockwidgetdemo.h"int main(int argc, char *argv[]){    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());    QApplication app(argc, argv);    MyDockWidgetDemo dock;    dock.show();    return app.exec();}


 

热点排行