QT中有九種容器組件,分別是組合框QGroupBox、滾動區QScrollArea、工具箱QToolBox、選項卡QTabWidget、控件棧QWidgetStack、框架QFrame、組件QWidget、MDI窗口顯示區QMdiArea、停靠窗口QDockWidget。app
QGroupBox爲構建分組框提供了支持。分組框一般帶有一個邊框和一個標題欄,做爲容器部件來使用,在其中能夠佈置各類窗口部件。分組框的標題一般在上方顯示,其位置能夠設置爲靠左、居中、靠右、自動調整這幾種方式之一。位於分組框之中的窗口部件能夠得到應用程序的焦點,位於分組框以內的窗口部件是分組框的子窗口,一般使用addWidget()方法把子窗口部件加入到分組框之中。框架
QGroupBox組件屬性設置選項:ide
A、name:組件對應源代碼中的名稱函數
B、title:組件對應圖形界面中所顯示的名稱工具
C、font:設置title的字體佈局
void setChecked ( bool checked )字體
設置QGroupBox使能ui
void setTitle ( const QString & title )this
設置組合框的標題文本spa
#include <QtGui/QApplication> #include <QDialog> #include <QVBoxLayout> #include <QGroupBox> #include <QRadioButton> #include <QCheckBox> int main(int argc, char *argv[]) { QApplication a(argc, argv); QDialog w; QGroupBox *group = new QGroupBox("option"); group->setCheckable(true); group->setChecked(true); QRadioButton *radio1 = new QRadioButton("banana"); QRadioButton *radio2 = new QRadioButton("pear"); QRadioButton *radio3 = new QRadioButton("apple"); radio1->setChecked(true); QCheckBox *check = new QCheckBox("rice"); check->setChecked(true); QVBoxLayout *vbox = new QVBoxLayout; vbox->addWidget(radio1); vbox->addWidget(radio2); vbox->addWidget(radio3); vbox->addWidget(check); group->setLayout(vbox); w.setLayout(vbox); w.show(); return a.exec(); }
QScrollArea滾動區組件用來顯示子控件的內容的框架,若是子控件的尺寸超過了框架的大小,可使用滾動條,方便查看整個子控件。QScrollArea 能夠給任何QWidget添加滾動條,但通常自定義窗體添加滾動條不顯示。
QScrollArea組件屬性設置選項:
A、name:同上
B、font:設置文本框的字體
QScrollArea::QScrollArea(QWidget *parent = 0)
構造一個父對象爲parent的ScrollArea
void QScrollArea::setWidget(QWidget *widget)
設置控件widget爲QScrollArea組件的子控件
QWidget *SCrollArea::takeWidget()
刪除QScrollArea的子控件
QWidget *QScrollArea::widget()const
返回QScrollArea的子控件
#include <QtGui/QApplication> #include <QLabel> #include <QImage> #include <QScrollArea> #include <QHBoxLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget w; QLabel *label = new QLabel(&w); QImage image("D:\\QT\\ScrollArea\\1.jpg"); QHBoxLayout *lay=new QHBoxLayout(&w); label->setPixmap(QPixmap::fromImage(image)); //建立滾動區, QScrollArea *scrollarea = new QScrollArea(&w); //將Widget組件加入滾動區 scrollarea->setWidget(label); //自動改變滾動區大小 scrollarea->setWidgetResizable(1); //設置滾動區背景顏色 scrollarea->setBackgroundRole(QPalette::Dark); lay->addWidget(scrollarea); w.setLayout(lay); w.show(); return a.exec(); }
QToolBox提供了一系列的頁和隔間,就像Qt Creator中的工具箱同樣。
QToolBox組件屬性設置選項
A、name:同上
B、font:同上
C、currentIndex:當前活動頁的索引
D、itemLabel:當前活動頁的標籤
E、itemName:當前活動頁的名稱
F、itemBackgroundModel:當前活動頁的背景模式
QToolBox::QToolBox(QWidget *parent = 0,const char *name = 0,QFlags f = 0)
構造一個名稱爲name,父對象爲parent和標誌位f的ToolBox
int addItem(QWidget *item,const QIconSet &iconSet,const QString &label)
增長一個item到ToolBox的底部,新增長的item的標籤的文本是label,標籤的圖標是iconSet
int addItem(QWidget *item,const QString &label)
增長一個item到ToolBox底部,新增長的item的標籤文本是label
int ToolBox::count()const
返回工具箱中item數目
int ToolBox::currentIndex()const
返回當前活動item的索引
QWidget *QToolBox::currentItem()const
返回當前活動item,若是該ToolBox爲空,返回0
int ToolBox::indexof(QWidget *item)const
返回item的索引
int QToolBox::insertItem(int index,QWidget *item,const QIconSet &iconSet,const QString &label)
在索引index處插入一個新的項目,項目是item,標籤圖標是iconSet,標籤文本時label,返回插入item的索引
int QToolBox::insertItem(int index,QWidget *item,const QString &label)
在索引index處插入一個新的項目,項目的名稱是item,標籤文本是label,返回插入item的索引。
QWidget *QToolBox::item(int index)const
返回索引爲index位置的item
QString QToolBox::itemLabel(int index)const
返回索引爲index位置的標籤
int QToolBox::RemoveItem(QWidget *item)
刪除ToolBox中的item的項目,刪除成功後返回item的索引,不然返回-1
void QToolBox::setCurrentIndex(int index)
設置索引爲index位置的項目爲當前活動項目
void QToolBox::setCurrentIndex(QWidget *item)
設置索引item爲當前活動的項目
void QToolBox::setItemLabel(int index,const QString &label)
設置label爲索引index位置的項目的標籤文本
ToolBox.h文件:
#ifndef TOOLBOX_H #define TOOLBOX_H #include <QToolBox> #include <QToolButton> #include <QGroupBox> #include <QVBoxLayout> class ToolBox : public QToolBox { Q_OBJECT public: explicit ToolBox(QWidget *parent = 0); private: QToolButton *button1; QToolButton *button2; QToolButton *button3; QToolButton *button11; QToolButton *button12; }; #endif // TOOLBOX_H
ToolBox.cpp文件:
#include "ToolBox.h" ToolBox::ToolBox(QWidget *parent) : QToolBox(parent) { setWindowTitle("ToolBox"); //***************水果***************** button1 = new QToolButton; button1->setText("apple"); button1->setAutoRaise(TRUE); button1->setToolButtonStyle(Qt::ToolButtonFollowStyle); button2 = new QToolButton; button2->setText("banana"); button2->setAutoRaise(TRUE); button2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); button3 = new QToolButton; button3->setText("pear"); button3->setAutoRaise(TRUE); button3->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //***************添加水果***************** QGroupBox *group = new QGroupBox; QVBoxLayout *layout = new QVBoxLayout(group); layout->setMargin(10); layout->setAlignment(Qt::AlignHCenter); layout->addWidget(button1); layout->addWidget(button2); layout->addWidget(button3); layout->addStretch(); //初始化電腦 button11 = new QToolButton; button11->setText("HP"); button11->setAutoRaise(TRUE); button11->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); button12 = new QToolButton; button12->setText("Lenovo"); button12->setAutoRaise(TRUE); button12->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //***************添加電腦***************** QGroupBox *group2 = new QGroupBox; QVBoxLayout *layout2 = new QVBoxLayout(group2); layout2->setMargin(10); layout2->setAlignment(Qt::AlignHCenter); layout2->addWidget(button11); layout2->addWidget(button12); layout2->addStretch(); this->addItem((QWidget*)group, "Fruits"); this->addItem((QWidget*)group2, "Computer"); }
Main.cpp文件:
#include <QtGui/QApplication>
#include "ToolBox.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
ToolBox toolbox;
toolbox.show();
return a.exec();
}
QTabWidget選項卡組件頂部或底部有一個標籤選項欄,每一個標籤選項都有一個頁面,選擇哪一個頁面,只需單擊對應的標籤便可,或按指定ALT+字母快捷鍵組合便可。
QTabWidget切換卡組件屬性設置選項:
A、name:同上
B、currentPage:當前活動的頁面
C、margin:頁面邊框的空白寬度,默認是0
D、tabShap:標籤選項的模式
E、pageName:當前活動頁的名稱
F、pageTitle:當前活動也得標籤文本
QTabWidget::QTabWidget(QWidget *parent = 0,const char *name = 0,WFlags f = 0)
構造一個名稱爲name、父對象爲parent和標記爲f的TabWidget
void QTabWidget::addTab(QWidget *child,const QString &label)[virtual]
增長子頁到TabWidget,子頁控件是child,子頁標籤文本是label
void QTabWidget::addTab(QWidget *child,const QIconSet &iconset,const QString &label)[virtual]
增長子頁到TabWidget,子頁控件是child,iconset是圖標,子頁標籤文本是label
QString QTabWidget::tabLabel(QWidget *w)const
返回索引index處子頁的選項標籤文本
void QTabWidget::changeTab(QWidget *w,const QString &label)
更改子頁w的標籤文本爲label
void QTabWidget::changeTab(QWidget *w,const QIconSet &iconset,const QString &label)
更改子頁w的圖標爲iconset,和更改標籤文本爲label
int QTabWidget::count()const
返回該TabWidget中子頁的數目
QWidget *QTabWidget::currentPage()const
返回當前活動子頁
int QTabWidget::currentPageIndex()const
返回當前活動子頁的索引
int QTabWidget::indexOf(QWidget *w)const
返回子頁w的索引
void QTabWidget::insertTab(QWidget *child,const QString &label,int index = -1)[virtual]
在索引index處插入新的子頁,子頁控件是child,子頁標籤文本是label。在插入新的子頁時要確保插入的子頁名與標籤文本與TabWidget中的全部子頁不一樣,若是指定index就是在指定的位置插入,不然就和簡單地添加同樣。
void QTabWidget::insetTab(QWidget *child,const QIconSet &iconset,const QString &label,int index = -1)[virtual]
在索引index處插入新的子頁,子頁控件是child,子頁標籤文本是label,子頁圖標爲iconset
QString QTabWidget::label(int index)const
返回索引index處子頁的選項標籤
QWidget *QTabWidget::page(int index)const
返回索引index處子頁
void QTabWidget::removePage(QWidget *w)[virtual slot]
刪除子頁w
void QTabWidget::setCurrentPage(int index)[slot]
設置索引index處子頁爲當前活動頁
void QTabWidget::setTabLabel(QWidget *w,const QString &label)
設置子頁w的標籤文本爲label
#include <QtGui/QApplication> #include <QLabel> #include <QHBoxLayout> #include <QTabWidget> #include <QPushButton> int main(int argc, char *argv[]) { QApplication a(argc, argv); QTabWidget *tab = new QTabWidget; //第一頁 QWidget *w = new QWidget(tab); QPushButton *button1 = new QPushButton("OK", w); QPushButton *button2 = new QPushButton("NO", w); QHBoxLayout *hlayout = new QHBoxLayout(w); hlayout->addWidget(button1); hlayout->addWidget(button2); tab->addTab(w, "option1"); //第二頁 QLabel *label = new QLabel("QT", tab); tab->addTab(label, "option2"); tab->setWindowTitle("QTabWidget"); tab->show(); return a.exec(); }
QStackedWidget控件棧,可使開發人員使用棧管理控件,像用棧管理其餘數據類型同樣簡單。控件棧只顯示棧頂的控件,開發人員可使用raiseWidget()函數把棧中任何其餘控件移到棧頂,從而實現控件之間的切換。
QStackedWidget控件棧屬性設置選項:
A、name:同上
B、currentPage:當前活動的頁面
C、pageName:當前活動頁的名稱
D、font:設置該控件內部文本的字體
QWidgetStack::QWidgetStack(QWidget *parent = 0,const char * name = 0)
構造一個名稱爲name,父對象爲parent的WidgetStack
int QWidgetStack::addWidget(QWidget *w,int id = -1)
把控件w添加到控件棧中,標識爲id
int QWidgetStack::id(QWidget *w)const
返回控件w的標識
void QWidgetStack::raiseWidget(int id)[slot]
把標識爲id的控件升到控件棧的棧頂
void QWidgetStack::raiseWidget(QWidget *w)[slot]
把控件w升到控件的棧頂
void QWidgetStack::removeWidget(QWidget *w)
把控件w從控件棧中刪除
QWidget *QWidgetStack::widget(int id)const
返回標識爲id的控件
#include <QtGui/QApplication> #include <QDialog> #include <QListWidget> #include <QStackedWidget> #include <QLabel> #include <QHBoxLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); QDialog w; w.setWindowTitle("StackedWidget"); //設置列表框 QListWidget *leftlist = new QListWidget(&w); leftlist->insertItem(0, "window1"); leftlist->insertItem(1, "window2"); leftlist->insertItem(2, "window3"); //設置堆棧窗體 QLabel *label1 = new QLabel("WindowTest1\n\tby liming"); QLabel *label2 = new QLabel("WindowTest2\n\tby liming"); QLabel *label3 = new QLabel("WindowTest3\n\tby liming"); QStackedWidget *stack = new QStackedWidget(&w); stack->addWidget(label1); stack->addWidget(label2); stack->addWidget(label3); //設置主窗體佈局 QHBoxLayout *mainLayout = new QHBoxLayout(&w); mainLayout->setMargin(5); mainLayout->setSpacing(5); mainLayout->addWidget(leftlist); mainLayout->addWidget(stack,0,Qt::AlignHCenter); mainLayout->setStretchFactor(leftlist,1); mainLayout->setStretchFactor(stack,3); w.connect(leftlist,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int))); w.show(); return a.exec(); }
QFrame類是有框架的窗口部件的基類,QFrame框架組件用來存放其餘控件,也可用於裝飾,通常用來做爲更加複雜容器的基礎,也能夠用在form中做爲佔用控件。
QFrame框架組件屬性設置選項:
A、name:同上
B、Shape framesShape:框架外形格式
C、Shadow framesShadow:框架陰影格式
D、frameWidth:框架的寬度(只讀)
E、LineWidth:線寬
QFrame::Shadow枚舉值以下:
QFrame::Plain - 框架和內容看來和周圍同樣高
QFrame::Raised - 框架和內容看起來凸起
QFrame::Sunken - 框架和內容看起來凹陷
QFrame::MShadow - 內部的,對於陰影的掩碼
QFrame::Shape 枚舉值以下:
NoFrame - QFrame不畫任何東西
Box - QFrame在它的內容周圍畫一個框
Panel - QFrame畫一個平板使內容看起來凸起或者凹陷
WinPanel - 像Panel,但QFrame繪製三維效果的方式和Microsoft Windows 同樣
HLine - QFrame繪製一個水平線,但沒有框任何東西(做爲分隔是有用的)
VLine - QFrame繪製一個豎直線,但沒有框任何東西(做爲分隔是有用的)
StyledPanel - QFrame調用QStyle::drawPanel()
QFrame::QFrame(QWidget *parent = 0,const char *name = 0,WFlags f = 0)
構造一個框架風格爲NoFrame而且1像素框架寬度的框架窗口部件,如:QFrame *f = new();
#include <QtGui/QApplication> #include <QLabel> #include <QHBoxLayout> #include <QTabWidget> #include <QPushButton> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget *win = new QWidget; QLabel *label = new QLabel("Box"); QLabel *label1 = new QLabel("Panel"); QLabel *label2 = new QLabel("Winpanel"); QLabel *label3 = new QLabel("H line"); QLabel *label4 = new QLabel("V line"); QLabel *label5 = new QLabel("Styled Panel"); label->setFrameStyle(QFrame::Box | QFrame::Raised); label->setLineWidth(2); label1->setFrameStyle(QFrame::Panel | QFrame::Raised); label1->setLineWidth(2); label2->setFrameStyle(QFrame::WinPanel | QFrame::Raised); label2->setLineWidth(2); label3->setFrameStyle(QFrame::HLine | QFrame::Raised); label3->setLineWidth(2); label4->setFrameStyle(QFrame::VLine | QFrame::Raised); label4->setLineWidth(2); label5->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); label5->setLineWidth(2); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(label); layout->addWidget(label1); layout->addWidget(label2); layout->addWidget(label3); layout->addWidget(label4); layout->addWidget(label5); win->setLayout(layout); win->showMaximized(); return a.exec(); }
QWidget類是全部用戶界面對象的基類,QWidget組件在建立時是不可見的,能夠包含子控件,在刪除Widget時,子控件也一塊兒刪除。
QWidget組件屬性設置選項:
A、name:同上
B、font:設置錶盤上的字體
C、cursor:設置鼠標光標樣式
QWidget::QWidget(QWidget *parent = 0,const char *name = 0,WFlags f = 0)
構造一個名稱爲name,父對象爲parent的Widget
QWidget *QWidget::childAt(int x,int y,bool includeThis = FALSE)const
返回該Widget座標系統中像素位置(x,y)處的可視的子窗口部件
QWidget *QWidget::childAt(const QPoint &p,bool includeThis = FALSE)const
返回該Widget座標系統位置p處的可視的子窗口部件
void QWidget::drawText(int x,int y,const QString &str)
在該Widget座標系統中像素位置(x,y)處繪製字符串str
void QWidget::drawText(const QPoint &p,const QString &str)
在該Widget座標系統中位置p處繪製字符串str
QMdiArea組件中文稱做「MDI窗口顯示區」,MDI是 Multiple Document Interface的簡稱,中文意思是多文檔界面,主要適用於完成一項工做時須要用到多個文件。QMainWindow是SDI(Signal Document Interface,單文檔界面)每一個開啓的文件佔據一個視窗,主要適用於全部工做沒有太多文件參與的狀況。
QMdiSubWindow類繼承自QWidget,主要用來建立MDI子窗體實例
QMdiArea組件屬性設置選項;
A、name:同上
B、font:同上
C、viewMode:設置視圖模式Qt提供TabbedView和SubWindowView兩種選擇
D、documentMode:保存的標籤欄在選項卡視圖模式是否設置爲文件的模式,默認爲false。
E、tabShape:(當viewMode是TabbedView時)設置該MdiArea的標籤形式Qt提供兩種選擇:Rounded和Triangular。
F、tabPosition:(當viewMode是TabbedView時)設置標籤所在方向
G、activeSubWindowName:子窗口的名稱
H、activeSubWindowTitle:子窗口的標籤
QMdiArea::QMdiArea(QWidget *parent = 0)
構造一個父對象爲parent的MdiArea
void QMdiArea::activateNextSubWindow()[slot]
激活下一個窗口
void QMdiArea::activatePreviousSubWindow()[slot]
激活上一個窗口
QMdiSubWindow *QMdiArea::activateSubWindow()const
返回當前活動子窗口,若是當前沒有活動子窗口,返回0
QMdiSubWindow *QMdiArea::addSubWindow(QWidget *widget,Qt::WindowFlags windowFlags = 0)
添加一個新的子窗口部件
void QMdiArea::closeActiveSubWindow()[slot]
關閉當前活動子窗口
void QMdiArea::closeAllSubWindow()[slot]
關閉全部子窗口
QMdiSubWindow *QMdiArea::currentSubWindow()const
函數功能同activeSubWindow(0
void QMdiArea::removeSubWindow(QWidget *widget)
刪除widget,widget必須是該MdiArea的子部件
void QMdiArea::setActiveSubWindow(QMdiSubWindow *window)[slot]
設置子窗口window爲當前活動子窗口
#include <QtGui/QApplication> #include <QMdiArea> #include <QMdiSubWindow> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); QMdiArea *mdi = new QMdiArea; QMdiSubWindow *sub = new QMdiSubWindow; QLabel *label = new QLabel("hello"); sub->setWidget(label); sub->setAttribute(Qt::WA_DeleteOnClose); mdi->addSubWindow(sub); mdi->show(); return a.exec(); }
QDockWidget停靠窗體組件,能夠做爲一個頂層窗口漂浮在桌面,主要做爲輔助窗體出如今界面中,能夠在不少IDE中看到停靠窗體。
QDockWidget包含工具欄和內容區域,工具欄用於顯示窗口標題,一個浮動按鈕和一個關閉按鈕。QDockWidget能夠做爲子窗口部件的封裝,經過setWidget()設置子窗口部件。自定義的尺寸提示,最小和最大化尺寸已經尺寸策略都必須由子窗口部件來實現。QDockWidget會遵照它們,調整它本身的限制包括框架和工具欄。咱們不該該爲QDockWidget設置尺寸限制,由於它們根據QDockWidget是否鎖住而改變,一個鎖住的QDockWidget窗口部件不 包括框架和小的工具欄。
QDockWidget組件屬性設置選項
A、name:同上
B、font:同上
C、floating:設置DockWidget是否爲可漂浮
D、feature:保存的停靠窗體一些功能,是否爲可移動,可關閉或浮動等,默認是可移動可關閉和浮動
E、allowedArea:DockWidget能夠停靠的地方
F、windowTitle:停靠窗體的標題
G、dockWidgetArea:設置DockWidget的停靠地方
H、docked:設置DockWidget是不是停靠着的
QDockWidget::QDockWidget(const QString &title,QWidget *parent = 0,Qt::WindowFlags flags = 0)
構造一個標題爲title,父對象爲parent的DockWidget
QDockWidget::QDockWidget(QWidget *parent = 0,Qt::WindowFlags flags = 0)
構造一個父對象爲parent和標誌位flags的DockWidget
void QDockWidget::setTitleBarWidget(QWidget *widget)
設置widget爲DockWidget的標題欄,若是widget爲0,將用默認標題欄代替
QWidget *QDockWidget::titleBarWidget()const
返回DockWidget定義的標題欄,若是沒有定義標題欄,返回0
void QDockWidget::setWidget(QWidget *widget)
設置widget爲DockWidget的部件,在調用setWidget函數以前,必須添加布局,不然widget就是不可見的
QWidget *DockWidget::widget()const
返回DockWidget的部件,若是沒有設置部件,則返回0
QDockWidget使用步驟:
A、建立QDockWidget對象的停靠窗體
QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);
第一個參數是停靠窗體的名稱,第二個參數是停靠窗體的父窗體。
B、設置停靠窗體的屬性
dock->setFeatures(QDockWidget::DockWidgetMovable);
C、將組件加入停靠窗體
dock->setWidget(widget);
D、將停靠窗體加入主窗體中
addDockWidget(Qt::RightDockWidgetArea,dock);
QDockWidget使用實例:
#include <QtGui/QApplication> #include <QTextEdit> #include <QDockWidget> #include <QMainWindow> int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow w; w.setWindowTitle("DockWindows");//設置主窗口標題欄文字 QTextEdit *te=new QTextEdit(&w); //定義一個QTextEdit對象做爲主窗口 te->setText("Main Window"); te->setAlignment(Qt::AlignCenter); w.setCentralWidget(te); //編輯框設置爲主窗口的中央窗口 //停靠窗口1 QDockWidget *dock=new QDockWidget("DockWindow1",&w); dock->setFeatures(QDockWidget::DockWidgetMovable);//可移動 dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); QTextEdit *te1 = new QTextEdit(); te1->setText("Window1,The dock widget can be moved between docks and users"); dock->setWidget(te1); w.addDockWidget(Qt::LeftDockWidgetArea,dock); //停靠窗口2 dock=new QDockWidget("DockWindow2",&w); dock->setFeatures(QDockWidget::DockWidgetClosable| QDockWidget::DockWidgetFloatable);//可關閉、可浮動 QTextEdit *te2 = new QTextEdit(); te2->setText("Window2,The dock widget can be detac from the main window,""and float as an independent window,and can be closed"); dock->setWidget(te2); w.addDockWidget(Qt::RightDockWidgetArea,dock); //停靠窗口3 dock=new QDockWidget("DockWindow3",&w); dock->setFeatures(QDockWidget::AllDockWidgetFeatures);//全部特性 QTextEdit *te3 = new QTextEdit(); te3->setText("Window3,The dock widget can be closed,moved,and float"); dock->setWidget(te3); w.addDockWidget(Qt::RightDockWidgetArea,dock); w.show(); return a.exec(); }