在Qt中,給主視窗(QMainWindow類)添加工具欄非常方便,直接使用addToolBar 即可,如下所示: 但是,addToolBar 是QMainWindow 類的函數,在QWidget類中沒有addToolBar類似的添加工具欄的函數,所以無法直接給QWidget類(QWidget的子類) ...
在Qt中,給主視窗(QMainWindow類)添加工具欄非常方便,直接使用addToolBar 即可,如下所示:
fileToolBar = addToolBar(tr("&File")); fileToolBar->addAction(fileNewAction); fileToolBar->addAction(fileOpenAction);
但是,addToolBar 是QMainWindow 類的函數,在QWidget類中沒有addToolBar類似的添加工具欄的函數,所以無法直接給QWidget類(QWidget的子類)添加工具欄。
能不能在QWidget類視窗中添加工具欄呢?當然可以。考慮到工具欄QToolBar其實也是QWidget的子類(class Q_GUI_EXPORT QToolBar : public QWidget ),直接把工具欄當作普通的QWidget添加到視窗中好了。一般的,工具欄處於視窗的頂部,所以,可以採取佈局,將工具欄置於頂部即可。
我的例子是要創建一個可停靠的組件箱,在組件 箱上方顯示相應的工具欄,如下所示:
一、 代碼節選
//2.1 工具欄 compsBoxToolBar = new QToolBar(tr("組件"),dockCompTools); compsBoxToolBar->setIconSize(QSize(16,16)); compsBoxToolBar->addAction(compsNewAction); compsBoxToolBar->addAction(compsOpenAction); compsBoxToolBar->addAction(compsSaveAction); ... //2.2 工具箱主體 listComp = new XCompListWidget(); ... //2.3 文本提示框 QLabel* lbl = new QLabel(this); lbl->setText(tr("組件說明:")); txtTipComp = new QTextEdit(); ... //2.4 佈局 QVBoxLayout *vboxLayout1 = new QVBoxLayout(); vboxLayout1->addWidget(compsBoxToolBar);//把工具欄作為一個widget添加到佈局中 vboxLayout1->addWidget(listComp); vboxLayout1->addWidget(lbl); vboxLayout1->addWidget(txtTipComp); ... //2.5 應用佈局 QWidget* dockWidgetContents = new QWidget(); dockWidgetContents->setLayout(vboxLayout1);