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 <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QGridLayout>

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 <QMainWindow>
#include <QDockWidget>
#include <QMenu>
#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 <QApplication>

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

    return a.exec();
}

四、界面实例

20171117

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值