環境:Win10+VS2015+Qt5.9.7
首先創建一個Qt GUI Application,在GUI上拖拽一個tabWidget,對象名爲tabWidget。系統會默認建立兩個選項卡,如果不用可以先刪除。
如圖:
在資源文件中添加icon與圖像資源:
tabWidget.h :
#pragma once
#include <QtWidgets/QMainWindow>
#include <QDebug>
#include <QHBoxLayout>
#include <QPushButton>
#include <QCheckBox>
#include <QRadioButton>
#include "ui_tabWidget.h"
#pragma execution_character_set("utf-8")
class tabWidget : public QMainWindow
{
Q_OBJECT
public:
tabWidget(QWidget *parent = Q_NULLPTR);
private:
Ui::tabWidgetClass ui;
};
在“採集”選項中添加一些按鈕資源:
tabWidget.cpp :
#include "tabWidget.h"
tabWidget::tabWidget(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QWidget *tabCalibration = new QWidget(this);
QWidget *tabImage = new QWidget(this);
ui.tabWidget->setTabPosition(QTabWidget::North);//設置選項卡的方位,默認在上方(東南西北)
ui.tabWidget->addTab(tabCalibration, QIcon("Resources\\a10.ico"), tr("校準"));//在後面添加帶圖標的選項卡
//ui.tabWidget->setIconSize(QSize(50, 25));//設置圖標的大小(選項卡的大小也會改變)
ui.tabWidget->addTab(tabImage, QIcon(QPixmap("Resources\\a11.png").scaled(150, 120)), NULL);//添加選項卡
ui.tabWidget->setTabToolTip(1, tr("圖像"));//鼠標懸停彈出提示
ui.tabWidget->setTabShape(QTabWidget::Triangular);//設置選項卡的形狀 Rounded
ui.tabWidget->setMovable(true);
ui.tabWidget->usesScrollButtons();//選項卡滾動
//ui->tabWidget->removeTab(0);//移除選項卡
//ui->tabWidget->clear();//清空選項卡
QHBoxLayout *hlayout1 = new QHBoxLayout;
QRadioButton *continusModeRadioButton = new QRadioButton(tr("連續"));
QRadioButton *triggerModeRadioButton = new QRadioButton(tr("觸發"));
hlayout1->addWidget(continusModeRadioButton);
hlayout1->addWidget(triggerModeRadioButton);
QHBoxLayout *hlayout2 = new QHBoxLayout;
QPushButton *startGrabbingPushButton = new QPushButton(tr("開始"));
QPushButton *stopGrabbingPushButton = new QPushButton(tr("停止"));
hlayout2->addWidget(startGrabbingPushButton);
hlayout2->addWidget(stopGrabbingPushButton);
QHBoxLayout *hlayout3 = new QHBoxLayout;
QCheckBox *softwareTriggerCheckBox = new QCheckBox(tr("選擇"));
QPushButton *softwareOncePushButton = new QPushButton(tr("終止"));
hlayout3->addWidget(softwareTriggerCheckBox);
hlayout3->addWidget(softwareOncePushButton);
QHBoxLayout *hlayout4 = new QHBoxLayout;
QCheckBox *detectionCheckBox = new QCheckBox(tr("檢測"));
hlayout4->addWidget(detectionCheckBox);
QGridLayout *vlayout = new QGridLayout;
vlayout->addLayout(hlayout1, 0, 0);
vlayout->addLayout(hlayout2, 1, 0);
vlayout->addLayout(hlayout3, 2, 0);
vlayout->addLayout(hlayout4, 3, 0);
QWidget *tabCollection = new QWidget;
tabCollection->setLayout(vlayout);
ui.tabWidget->insertTab(1, tabCollection, QIcon("Resources\\a12.ico"), tr("採集"));//插入選項卡
}
最後界面效果,如圖:
這時,可以爲選項卡中的控件資源添加槽函數:
tabWidget.h :
#pragma once
#include <QtWidgets/QMainWindow>
#include <QDebug>
#include <QHBoxLayout>
#include <QPushButton>
#include <QCheckBox>
#include <QRadioButton>
#include <QMessageBox>
#include "ui_tabWidget.h"
#pragma execution_character_set("utf-8")
class tabWidget : public QMainWindow
{
Q_OBJECT
public:
tabWidget(QWidget *parent = Q_NULLPTR);
private:
Ui::tabWidgetClass ui;
QPushButton *startGrabbingPushButton;
QPushButton *stopGrabbingPushButton;
private slots:
void runPushButtonSlot();
};
tabWidget.cpp :
#include "tabWidget.h"
tabWidget::tabWidget(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QWidget *tabCalibration = new QWidget(this);
QWidget *tabImage = new QWidget(this);
ui.tabWidget->setTabPosition(QTabWidget::North);//設置選項卡的方位,默認在上方(東南西北)
ui.tabWidget->addTab(tabCalibration, QIcon("Resources\\a10.ico"), tr("校準"));//在後面添加帶圖標的選項卡
//ui.tabWidget->setIconSize(QSize(50, 25));//設置圖標的大小(選項卡的大小也會改變)
ui.tabWidget->addTab(tabImage, QIcon(QPixmap("Resources\\a11.png").scaled(150, 120)), NULL);//添加選項卡
ui.tabWidget->setTabToolTip(1, tr("圖像"));//鼠標懸停彈出提示
ui.tabWidget->setTabShape(QTabWidget::Triangular);//設置選項卡的形狀 Rounded
ui.tabWidget->setMovable(true);
ui.tabWidget->usesScrollButtons();//選項卡滾動
//ui->tabWidget->removeTab(0);//移除選項卡
//ui->tabWidget->clear();//清空選項卡
QHBoxLayout *hlayout1 = new QHBoxLayout;
QRadioButton *continusModeRadioButton = new QRadioButton(tr("連續"));
QRadioButton *triggerModeRadioButton = new QRadioButton(tr("觸發"));
hlayout1->addWidget(continusModeRadioButton);
hlayout1->addWidget(triggerModeRadioButton);
QHBoxLayout *hlayout2 = new QHBoxLayout;
startGrabbingPushButton = new QPushButton(tr("開始"));
startGrabbingPushButton->setStyleSheet("background-color: rgb(0, 255, 127);");
QObject::connect(startGrabbingPushButton, SIGNAL(clicked()), this, SLOT(runPushButtonSlot()));
stopGrabbingPushButton = new QPushButton(tr("停止"));
hlayout2->addWidget(startGrabbingPushButton);
hlayout2->addWidget(stopGrabbingPushButton);
QHBoxLayout *hlayout3 = new QHBoxLayout;
QCheckBox *softwareTriggerCheckBox = new QCheckBox(tr("選擇"));
QPushButton *softwareOncePushButton = new QPushButton(tr("終止"));
hlayout3->addWidget(softwareTriggerCheckBox);
hlayout3->addWidget(softwareOncePushButton);
QHBoxLayout *hlayout4 = new QHBoxLayout;
QCheckBox *detectionCheckBox = new QCheckBox(tr("檢測"));
hlayout4->addWidget(detectionCheckBox);
QGridLayout *vlayout = new QGridLayout;
vlayout->addLayout(hlayout1, 0, 0);
vlayout->addLayout(hlayout2, 1, 0);
vlayout->addLayout(hlayout3, 2, 0);
vlayout->addLayout(hlayout4, 3, 0);
QWidget *tabCollection = new QWidget;
tabCollection->setLayout(vlayout);
ui.tabWidget->insertTab(1, tabCollection, QIcon("Resources\\a12.ico"), tr("採集"));//插入選項卡
}
void tabWidget::runPushButtonSlot()
{
qDebug() << "第1個選項卡名稱:" << ui.tabWidget->tabText(0);
QMessageBox::information(this, "第1個選項卡名稱:", ui.tabWidget->tabText(0));//獲取選項卡名稱
startGrabbingPushButton->setStyleSheet("background-color: rgb(255, 100, 100);");
}