Qt中建立DockWidget的代码

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 
#include 
#include 
#include 

namespace Ui {
class Form_Widget;
}

class Form_Widget : public QWidget
{
    Q_OBJECT

public:
    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 
#include 
#include 
#include "form_widget.h"


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    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 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

四、界面实例

Qt中建立DockWidget的代码_第1张图片

20171117

你可能感兴趣的:(Qt中建立DockWidget的代码)