Qt中常用容器组控件介绍和实操-1
https://developer.aliyun.com/article/1507894
3.Tab Widget
QTabWidget:可以将多个控件以选项卡的形式展示,用户可以点击不同的选项卡来切换控件。
案例分析:
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTabWidget> #include <QGridLayout> #include <QLabel> #include <QPushButton> #include <QLineEdit> #include <QMessageBox> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private: QTabWidget *tabWidgetUI; private slots: void MsgCommit(); }; #endif // WIDGET_H
main.cpp
#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
widget.cpp
#include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { this->setWindowTitle("Tab Widget"); this->setGeometry(300,200,600,400); tabWidgetUI=new QTabWidget(this); tabWidgetUI->setGeometry(20,20,560,360); tabWidgetUI->show(); bool m_showtabwidgetui1=true; bool m_showtabwidgetui2=true; // bool m_showtabwidgetui3=false; // bool m_showtabwidgetui4=false; if(m_showtabwidgetui1){ QWidget *qwidget1=new QWidget(); tabWidgetUI->addTab(qwidget1,"进程"); QGridLayout *glayout=new QGridLayout(); QLabel *lab1=new QLabel("请选择文件及文件夹:"); QLineEdit *ledit1=new QLineEdit(); QPushButton *pbt1=new QPushButton("消息框..."); connect(pbt1,SIGNAL(clicked(bool)),this,SLOT(MsgCommit())); glayout->addWidget(lab1,0,0); glayout->addWidget(ledit1,0,1); glayout->addWidget(pbt1,0,2); qwidget1->setLayout(glayout); } if(m_showtabwidgetui2){ QWidget *qwidget2=new QWidget(); tabWidgetUI->addTab(qwidget2,"性能"); } } Widget::~Widget() { } void Widget::MsgCommit() { QMessageBox::information(NULL,"testing","QMessageBox:命令按钮测试成功!",QMessageBox::Ok); }
编译执行结果:
4.Frame
QFrame是一个QWidget的子类,可以用作容器,用于显示其他窗口部件或绘制简单的框架。QFrame可以用于创建矩形、线条和点等几何形状。QFrame还可以用于设置可用性、布局和样式表。
先进行ui设计两个框架:
再进行代码编写:
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private: Ui::Widget *ui; }; #endif // WIDGET_H
main.cpp
#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
widget.cpp
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); setWindowTitle("Frame"); ui->frame_1->setStyleSheet("background-color:yellow"); ui->frame_2->setStyleSheet("background-color:black"); ui->frame_1->setLineWidth(1); ui->frame_1->setMidLineWidth(1); ui->frame_1->setFrameShape(QFrame::Box); ui->frame_1->setFrameShadow(QFrame::Raised); ui->frame_2->setLineWidth(0); ui->frame_2->setMidLineWidth(1); ui->frame_2->setFrameShape(QFrame::Box); ui->frame_2->setFrameShadow(QFrame::Sunken); } Widget::~Widget() { delete ui; }
编译执行结果:
5.Dock Widget
QDockWidget是Qt框架中的一个小部件,用于创建可停靠的窗口。它提供了一个可停靠的窗口,其中包含了一个主要的小部件和一些辅助的小部件。它可以以四个停靠区域的任何一个(上、下、左、右)停靠到主窗口周围,也可以脱靶,浮动在主窗口之外。
QDockWidget的主要特点是:
- 可以独立于主窗口停靠和浮动。
- 可以在主窗口周围的四个方向停靠。
- 可以包含其他的子部件,方便组织用户界面。
- 可以通过API进行动态的操作,例如添加、移除、重新排列等。
QDockWidget的用途非常广泛,无论是作为工具条、面板、属性编辑器、日志查看器等都非常适合。在Qt中,使用QDockWidget可以轻松地实现各种类型的可停靠窗口。
案例分析:
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDockWidget> // 只能停靠在mainwindow里 #include <QLabel> #include <QComboBox> #include <QGridLayout> #include <QPushButton> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); setWindowTitle("QDockWidget"); QDockWidget *dw=new QDockWidget("停靠窗口部件测试:Dock Widget-->Vico",this); // 设置颜色 QPalette pal; pal.setColor(QPalette::Background,Qt::cyan); dw->setAutoFillBackground(true); dw->setPalette(pal); // 学历层次 QLabel *lab=new QLabel("学历层次:"); QComboBox *cbx=new QComboBox(); cbx->addItem("小学"); cbx->addItem("初中"); cbx->addItem("高中"); cbx->addItem("专科"); cbx->addItem("本科"); cbx->addItem("硕士研究生"); cbx->addItem("博士研究生"); QPushButton *pbt1=new QPushButton("清华大学"); QPushButton *pbt2=new QPushButton("北京大学"); // 通过栅格布局(网格布局) QGridLayout *glayout=new QGridLayout(); glayout->addWidget(lab,0,0,1,1); glayout->addWidget(cbx,0,1,1,1); glayout->addWidget(pbt1,1,0,1,1); glayout->addWidget(pbt2,1,1,1,1); glayout->setHorizontalSpacing(10); glayout->setVerticalSpacing(10); glayout->setContentsMargins(20,20,20,20); QWidget *wgt=new QWidget(); wgt->setLayout(glayout); dw->setWidget(wgt); dw->setMaximumSize(300,300); } MainWindow::~MainWindow() { delete ui; }
编译执行结果: