Qt学习笔记——停靠窗口QDockWidget

 

QDockWidget

这是一个停靠窗口,可停靠在主窗口的上下左右边框,停靠窗口显示的内容需要通过插入内容进行显示

函数:

void setWidget(QWidget * widget);  插入一个widget,作为停靠窗口显示内容

void setFeatures(DockWidgetFeatures features);  设置窗口特性

QDockWidget::DockWidgetFeatures用于设置窗口的特性,包括以下几种:

QDockWidget::DockWidgetClosable 窗口可关闭

QDockWidget::DockWidgetMovable 窗口可移动

QDockWidget::DockWidgetFloatable 窗口可浮动

QDockWidget::AllDockWidgetFeatures 窗口可关闭,可移动,可浮动

QDockWidget::NoDockWidgetFeatures 窗口不可关闭,不可移动,不可浮动

可移动的效果:                                                        可浮动可关闭的效果:

                          

void setAllowedAreas(Qt::DockWidgetAreas areas); 设置窗口可停靠位置

Qt::DockWidgetAreas用于设置窗口的可停靠位置,包括以下几种:

Qt::LeftDockWidgetAreas 可停靠于左侧

Qt::RightDockWidgetAreas 可停靠于右侧,上面的例子为停靠于右侧

Qt::TopDockWidgetAreas 可停靠于顶部

Qt::BottomDockWidgetAreas 可停靠于底部

Qt::AllDockWidgetAreas 可停靠于所有位置(上下左右

Qt::NoDockWidgetAreas 只停靠于插入的位置

void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)

主窗口->addDockWidget  设置dockwidget插入的位置

Qt::DockWidgetArea用于设置插入的位置,包括以下几种:
Qt::LeftDockWidgetArea 插入到左侧
Qt::RightDockWidgetArea 插入到右侧
Qt::TopDockWidgetArea 插入到顶部
Qt::BottomDockWidgetArea 插入到底部
Qt::AllDockWidgetAreas 插入到所有位置(意义不明= =
Qt::NoDockWidgetArea 不进行插入操作

例子 :

使用QStackedWidget,两个QDockWidget,主窗口QMainWindow,做出以下效果

第一个QDockWidget使用一个QListWidget作为内容,第二个QDockWidget使用QTextBrowser作为显示内容

通过选择QListWidget的Item,来进行QStackedWidget的窗口切换

效果:

部分代码:

MainWindow

#include <QMainWindow>
#include <QStackedWidget>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    void init();

private slots:
    void setCurrentWidget(int index);

private:
    QStackedWidget * m_pWidget;
    QDockWidget * m_pListDock;
    QDockWidget * m_pMessageDock;
};
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    init();

}

MainWindow::~MainWindow()
{

}

void MainWindow::init()
{
    m_pWidget = new QStackedWidget(this);
    m_pListDock = new QDockWidget("Select Widget", this);
    m_pMessageDock = new QDockWidget("Messages", this);

    FirstWidget * firstWidget = new FirstWidget(m_pWidget);
    SecondWidget * secondWidget = new SecondWidget(m_pWidget);
    //第一个是继承了QWidget的类,在其中插入了一个QTextEdit
    //第二个是继承了QListWidget的类,插入了几个Item
    //横向展示item,使用listWidget->setFlow(QListWidget::LeftToRight)    

    m_pWidget->addWidget(firstWidget);
    m_pWidget->addWidget(secondWidget);
    m_pWidget->setCurrentIndex(0);
    m_pWidget->setMinimumSize(450, 350);

    setCentralWidget(m_pWidget);
    m_pListDock->setFeatures(QDockWidget::DockWidgetMovable);
    //设置停靠窗口的特性,此处为可移动

    m_pListDock->setAllowedAreas(Qt::RightDockWidgetArea);
    //设置在主窗口中(parent中)可停靠的位置,此处设置为右边框
    QListWidget * list = new QListWidget(m_pListDock);
    list->addItem("FirstWidget");
    list->addItem("SecondWidget");

    m_pListDock->setMinimumSize(200, 150);
    m_pListDock->setWidget(list);



    m_pMessageDock->setFeatures(QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetClosable);
    //此处为可浮动可关闭
    m_pMessageDock->setAllowedAreas(Qt::RightDockWidgetArea);
    QTextBrowser * textBrowser = new QTextBrowser(m_pMessageDock);
    textBrowser->setText("The Message Browser");

    m_pMessageDock->setWidget(textBrowser);


    addDockWidget(Qt::RightDockWidgetArea,m_pListDock);
    addDockWidget(Qt::RightDockWidgetArea,m_pMessageDock);

    connect(list, SIGNAL(currentRowChanged(int)), this, SLOT(setCurrentWidget(int)));
    resize(600, 350);
}

void MainWindow::setCurrentWidget(int index)
{
    m_pWidget->setCurrentIndex(index);
}

猜你喜欢

转载自blog.csdn.net/qq_15710245/article/details/83190375
今日推荐