QT中窗体的停靠

    xiaoxiao2021-03-26  55

     

     

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

        可停靠位置:

     

     

    [cpp] view plain copy  print? //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_OBJECT   public:       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  [cpp] view plain copy  print? //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());   }  

     

    [cpp] view plain copy  print? //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();   }   转自:http://blog.csdn.net/qiurisuixiang/article/details/7781710
    转载请注明原文地址: https://ju.6miu.com/read-663874.html

    最新回复(0)