Qt中建立DockWidget的代码

来源:互联网 发布:ps在mac上如何下载 编辑:程序博客网 时间:2024/06/07 20:52

Qt中使用dock(浮窗)是一个多界面编程的很好的思路。

一、操作步骤

(1)新建一个widget的继承类(如myWidget);

(2)在继承类myWidget的函数中添加各控件;

(3)在继承类myWidget中将各控件添加到一个layout中,并在该类下执行setLayout函数。

(4)在主窗口(MainWindow)中新建一个QDockWidget对象、一个myWidget对象。

(5)在该QDockWidget对象中执行setwidget函数,输入参数时myWidget对象。

二、小技巧

(1)与菜单项联系起来:

在菜单栏中利用QDockWidget中的toggleViewAction,将dock浮窗和菜单栏中的菜单项联系起来。

(2)将多个dock浮窗折叠起来:tabifyDockWidget

(3)四个边均有dock浮窗时,设置角落归谁的代码:

    setCorner(Qt::BottomLeftCorner,Qt::LeftDockWidgetArea);//让左下角区域归于左边停靠区域
    setCorner(Qt::BottomRightCorner,Qt::RightDockWidgetArea);//让右下角区域归于右边停靠区域
    setCorner(Qt::TopLeftCorner,Qt::LeftDockWidgetArea);//让左上角区域归于左边停靠区域
    setCorner(Qt::TopRightCorner,Qt::RightDockWidgetArea);//让右上角区域归于右边停靠区域

三、代码实例

(1)form_widget.h

#ifndef FORM_WIDGET_H#define FORM_WIDGET_H#include <QWidget>#include <QPushButton>#include <QLineEdit>#include <QGridLayout>namespace Ui {class Form_Widget;}class Form_Widget : public QWidget{    Q_OBJECTpublic:    explicit Form_Widget(QWidget *parent = 0);    ~Form_Widget();private:    Ui::Form_Widget *ui;    QPushButton *m_button1;    QPushButton *m_button2;    QLineEdit *m_lineedit1;    QLineEdit *m_lineedit2;    QGridLayout *m_layout;public:    void func_create_widget();};#endif // FORM_WIDGET_H


(2)mainwindow.h

#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QDockWidget>#include <QMenu>#include "form_widget.h"namespace Ui {class MainWindow;}class MainWindow : public QMainWindow{    Q_OBJECTpublic:    explicit MainWindow(QWidget *parent = 0);    ~MainWindow();private:    Ui::MainWindow *ui;    Form_Widget *m_widget_example;    QDockWidget *m_dock1;    QMenu *m_ViewMenu;public:    void func_create_widget_dock();    void func_create_menu();};#endif // MAINWINDOW_H


(3)form_widget.cpp

#include "form_widget.h"#include "ui_form_widget.h"Form_Widget::Form_Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Form_Widget){    ui->setupUi(this);    func_create_widget();}Form_Widget::~Form_Widget(){    delete ui;}void Form_Widget::func_create_widget(){    m_button1 = new QPushButton("button 1");    m_button2 = new QPushButton("button 2");    m_lineedit1 = new QLineEdit("lineedit 1");    m_lineedit2 = new QLineEdit("lineedit 2");    m_layout = new QGridLayout;    m_layout->addWidget(m_lineedit1,0,0,1,1);    m_layout->addWidget(m_button1,0,1,1,1);    m_layout->addWidget(m_lineedit2,1,0,1,1);    m_layout->addWidget(m_button2,1,1,1,1);    this->setLayout(m_layout);}

(4)mainwindow.cpp

#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent) :    QMainWindow(parent),    ui(new Ui::MainWindow){    ui->setupUi(this);    this->resize(QSize(800,600));    func_create_widget_dock();    func_create_menu();}MainWindow::~MainWindow(){    delete ui;}void MainWindow::func_create_widget_dock(){    m_dock1 = new QDockWidget(this);    m_widget_example = new Form_Widget;    m_dock1->setWindowTitle("dock 1");    m_dock1->setWidget(m_widget_example);    this->addDockWidget(Qt::RightDockWidgetArea,m_dock1);}void MainWindow::func_create_menu(){    m_ViewMenu = new QMenu(this);    m_ViewMenu = menuBar()->addMenu(QString::fromLocal8Bit("窗口"));    m_ViewMenu->addAction(m_dock1->toggleViewAction());}


(5)main.cpp

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]){    QApplication a(argc, argv);    MainWindow w;    w.show();    return a.exec();}

四、界面实例

20171117

原创粉丝点击