Qt 容器控件之Tab Widget 使用详解

目录

功能

属性设置

相关API

信号 

槽函数 


功能

QTabWidget 的一种带标签页的窗口,在这种类型的窗口中可以存储多个子窗口,每个子窗口的显示可以通过对应的标签进行切换。

属性设置

相关API

// 构造函数
QTabWidget::QTabWidget(QWidget *parent = Q_NULLPTR);

// 公共成员函数
/*
添加选项卡addTab()或者插入选项卡insertTab()函数相关的参数如下:
    - page: 添加或者插入的选项卡对应的窗口实例对象
    - label: 添加或者插入的选项卡的标题
    - icon: 添加或者插入的选项卡的图标
    - index: 将新的选项卡插入到索引index的位置上
*/
int QTabWidget::addTab(QWidget *page, const QString &label);
int QTabWidget::addTab(QWidget *page, const QIcon &icon, const QString &label);
int QTabWidget::insertTab(int index, QWidget *page, const QString &label);
int QTabWidget::insertTab(int index, QWidget *page, 
                          const QIcon &icon, const QString &label);


// 删除index位置的选项卡
void QTabWidget::removeTab(int index);

// 得到选项卡栏中的选项卡的数量
int count() const;


// 从窗口中移除所有页面,但不删除它们。调用这个函数相当于调用removeTab(),直到选项卡小部件为空为止。
void QTabWidget::clear();


// 获取当前选项卡对应的索引
int QTabWidget::currentIndex() const;


// 获取当前选项卡对应的窗口对象地址
QWidget *QTabWidget::currentWidget() const;


// 返回索引位置为index的选项卡页,如果索引超出范围则返回0。
QWidget *QTabWidget::widget(int index) const;

/*
标签上显示的文本样式为枚举类型 Qt::TextElideMode, 可选项为:
    - Qt::ElideLeft: 省略号应出现在课文的开头,例如:.....是的,我很帅。
    - Qt::ElideRight: 省略号应出现在文本的末尾,例如:我帅吗.....。
    - Qt::ElideMiddle: 省略号应出现在文本的中间,例如:我帅.....很帅。
    - Qt::ElideNone: 省略号不应出现在文本中
*/
// 获取标签上显示的文本模式
Qt::TextElideMode QTabWidget::elideMode() const;


// 如何省略标签栏中的文本, 此属性控制在给定的选项卡栏大小没有足够的空间显示项时如何省略项。
void QTabWidget::setElideMode(Qt::TextElideMode);
    
// 得到选项卡上图标的尺寸信息
QSize QTabWidget::iconSize() const


// 设置选项卡上显示的图标大小
void QTabWidget::setIconSize(const QSize &size)

// 判断用户是否可以在选项卡区域内移动选项卡, 可以返回true, 否则返回false
bool QTabWidget::isMovable() const;


// 此属性用于设置用户是否可以在选项卡区域内移动选项卡。默认情况下,此属性为false;
void QTabWidget::setMovable(bool movable);

// 判断选项卡是否可以自动隐藏, 如果可以自动隐藏返回true, 否则返回false
bool QTabWidget::tabBarAutoHide() const;


// 如果为true,则当选项卡栏包含少于2个选项卡时,它将自动隐藏。默认情况下,此属性为false。
void QTabWidget::setTabBarAutoHide(bool enabled);

// 判断index对应的选项卡是否是被启用的, 如果是被启用的返回true, 否则返回false
bool QTabWidget::isTabEnabled(int index) const;


// 如果enable为true,则在索引位置的页面是启用的;否则,在位置索引处的页面将被禁用。
void QTabWidget::setTabEnabled(int index, bool enable);

// 得到index位置的标签对应的图标
QIcon QTabWidget::tabIcon(int index) const;


// 在位置索引处设置标签的图标。
void QTabWidget::setTabIcon(int index, const QIcon &icon);

/*
选项卡标签的位置通过枚举值进行指定, 可使用的选项如下:
    - QTabWidget::North: 北(上), 默认
    - QTabWidget::South: 南(下)
    - QTabWidget::West:     西(左)
    - QTabWidget::East:  东(右)
*/
// 得到选项卡中显示的标签的位置, 即: 东, 西, 南, 北
TabPosition QTabWidget::tabPosition() const;


// 设置选项卡中标签显示的位置, 默认情况下,此属性设置为North。
void QTabWidget::setTabPosition(TabPosition);

/*
选项卡标签的形状通过枚举值进行指定, 可使用的选项如下:
    - QTabWidget::Rounded: 标签以圆形的外观绘制。这是默认形状
    - QTabWidget::Triangular: 选项卡以三角形外观绘制。
*/
// 获得选项卡标签的形状
TabShape QTabWidget::tabShape() const;


// 设置选项卡标签的形状
void QTabWidget::setTabShape(TabShape s);

// 得到index位置的标签的标题
QString QTabWidget::tabText(int index) const;


// 设置选项卡index位置的标签的标题
void QTabWidget::setTabText(int index, const QString &label);


// 获取index对应的标签页上设置的提示信息
QString QTabWidget::tabToolTip(int index) const;


// 设置选项卡index位置的标签的提示信息(鼠标需要悬停在标签上一定时长才能显示)
void QTabWidget::setTabToolTip(int index, const QString &tip);


// 判断选项卡标签也上是否有关闭按钮, 如果有返回true, 否则返回false
bool QTabWidget::tabsClosable() const;


// 设置选项卡的标签页上是否显示关闭按钮, 该属性默认情况下为false
void QTabWidget::setTabsClosable(bool closeable);


// 判断选项卡栏中是否有滚动按钮, 如果有返回true, 否则返回false
bool QTabWidget::usesScrollButtons() const;


// 设置选项卡栏有许多标签时,它是否应该使用按钮来滚动标签。
// 当一个选项卡栏有太多的标签时,选项卡栏可以选择扩大它的大小,或者添加按钮,让标签在选项卡栏中滚动。
void QTabWidget::setUsesScrollButtons(bool useButtons);

// 判断窗口是否设置了文档模式, 如果设置了返回true, 否则返回false
bool QTabWidget::documentMode() const;
// 此属性保存选项卡小部件是否以适合文档页面的模式呈现。这与macOS上的文档模式相同。


// 不设置该属性, QTabWidget窗口是带边框的, 如果设置了该属性边框就没有了。
void QTabWidget::setDocumentMode(bool set);

信号 

// 每当当前页索引改变时,就会发出这个信号。参数是新的当前页索引位置,如果没有新的索引位置,则为-1
[signal] void QTabWidget::currentChanged(int index);


// 当用户单击索引处的选项卡时,就会发出这个信号。index指所单击的选项卡,如果光标下没有选项卡,则为-1。
[signal] void QTabWidget::tabBarClicked(int index)


// 当用户双击索引上的一个选项卡时,就会发出这个信号。
// index是单击的选项卡的索引,如果光标下没有选项卡,则为-1。
[signal] void QTabWidget::tabBarDoubleClicked(int index);


// 此信号在单击选项卡上的close按钮时发出。索引是应该被删除的索引。     
[signal] void QTabWidget::tabCloseRequested(int index);


 

槽函数 

// 设置当前窗口中显示选项卡index位置对应的标签页内容
[slot] void QTabWidget::setCurrentIndex(int index);


// 设置当前窗口中显示选项卡中子窗口widget中的内容
[slot] void QTabWidget::setCurrentWidget(QWidget *widget);

示例代码 

// mainwindow.cpp
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 点击了标签上的关闭按钮
    connect(ui->tabWidget, &QTabWidget::tabCloseRequested, this, [=](int index)
    {
        // 保存信息
        QWidget* wg = ui->tabWidget->widget(index);
        QString title = ui->tabWidget->tabText(index);
        m_widgets.enqueue(wg);
        m_names.enqueue(title);
        // 移除tab页
        ui->tabWidget->removeTab(index);
        ui->addBtn->setEnabled(true);

    });

    // 当标签被点击了之后的处理动作
    connect(ui->tabWidget, &QTabWidget::tabBarClicked, this, [=](int index)
    {
        qDebug() << "我被点击了一下, 我的标题是: " << ui->tabWidget->tabText(index);
    });

    // 切换标签之后的处理动作
    connect(ui->tabWidget, &QTabWidget::currentChanged, this, [=](int index)
    {
        qDebug() << "当前显示的tab页, 我的标题是: " << ui->tabWidget->tabText(index);
    });

    // 点击添加标签按钮点击之后的处理动作
    connect(ui->addBtn, &QPushButton::clicked, this, [=]()
    {
        // 将被删除的标签页添加到窗口中
        // 1. 知道窗口对象, 窗口的标题
        // 2. 知道添加函数
        ui->tabWidget->addTab(m_widgets.dequeue(), m_names.dequeue());
        if(m_widgets.empty())
        {
            ui->addBtn->setDisabled(true);
        }
    });
}
  • 24
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Qt使用OpenGLWidget件显示.tif图像,你可以按照以下步骤进行操作: 1. 确保你的项目已经包含了OpenGL模块。在Qt项目的.pro文件中添加以下行: ``` QT += opengl ``` 2. 创建一个自定义的OpenGLWidget子类,用于显示图像。首先,在项目中创建一个新的类文件,例如"ImageWidget.h"和"ImageWidget.cpp"。 3. 在ImageWidget.h文件中,定义一个继承自QOpenGLWidget的ImageWidget类,并重新实现以下方法: ```cpp #ifndef IMAGEWIDGET_H #define IMAGEWIDGET_H #include <QOpenGLWidget> #include <QOpenGLFunctions> #include <QImage> class ImageWidget : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT public: ImageWidget(QWidget *parent = nullptr); ~ImageWidget(); void setImage(const QString& imagePath); protected: void initializeGL() override; void paintGL() override; void resizeGL(int w, int h) override; private: QImage m_image; }; #endif // IMAGEWIDGET_H ``` 4. 在ImageWidget.cpp文件中,实现ImageWidget类的方法: ```cpp #include "ImageWidget.h" ImageWidget::ImageWidget(QWidget *parent) : QOpenGLWidget(parent) { } ImageWidget::~ImageWidget() { } void ImageWidget::setImage(const QString& imagePath) { m_image = QImage(imagePath); update(); } void ImageWidget::initializeGL() { initializeOpenGLFunctions(); } void ImageWidget::paintGL() { glClearColor(0, 0, 0, 1); glClear(GL_COLOR_BUFFER_BIT); if (!m_image.isNull()) { glLoadIdentity(); glOrtho(0, width(), height(), 0, -1, 1); glRasterPos2i(0, 0); glPixelZoom(1, -1); glDrawPixels(m_image.width(), m_image.height(), GL_RGBA, GL_UNSIGNED_BYTE, m_image.constBits()); } } void ImageWidget::resizeGL(int w, int h) { glViewport(0, 0, w, h); } ``` 5. 在你的主窗口或其他需要显示图像的窗口中,使用ImageWidget件,并调用setImage方法设置图像路径: ```cpp #include "MainWindow.h" #include "ui_MainWindow.h" #include "ImageWidget.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ImageWidget* imageWidget = new ImageWidget(this); imageWidget->setImage("your_tif_image.tif"); ui->verticalLayout->addWidget(imageWidget); // 将ImageWidget添加到布局中 } MainWindow::~MainWindow() { delete ui; } ``` 请确保将"your_tif_image.tif"替换为实际的图像路径。这样,你就可以使用OpenGLWidget件在Qt中显示.tif图像了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值