网站建设丨找王科杰效果好,全网推广推荐,上海建工网站,wordpress数据库破解版QTabWidget 用来分页显示 重要函数: 1.void setTabText(int, QString); //设置页面的名字. 2.void setTabToolTip(QString); //设置页面的提示信息. 3.void setTabEnabled(bool); //设置页面是否被激活. 4.void setTabPosition(QTabPosition::South); //设置页面名字的位置. 5.…QTabWidget 用来分页显示 重要函数: 1.void setTabText(int, QString); //设置页面的名字. 2.void setTabToolTip(QString); //设置页面的提示信息. 3.void setTabEnabled(bool); //设置页面是否被激活. 4.void setTabPosition(QTabPosition::South); //设置页面名字的位置. 5.void setTabsClosable(bool); //设置页面关闭按钮。 6.int currentIndex(); //返回当前页面的下标从0开始. 7.int count(); //返回页面的数量. 8.void clear(); //清空所有页面. 9.void removeTab(int); //删除页面. 10.void setMoveable(bool); //设置页面是否可被拖拽移动. 11.void setCurrentIndex(int); //设置当前显示的页面.
signals: 1.void tabCloseRequested(int). //当点击第参数个选项卡的关闭按钮的时候发出信号. 2.void tabBarClicked(int). //当点击第参数个选项卡的时候发出信号. 3.void currentChanged(int). //当改变第参数个选项卡的时候发出信号. 4.void tabBarDoubleClicked(int). //当双击第参数个选项卡的时候发出信号. c.cpp
#include c.h
c::c(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);//连接信号与槽.connect(ui.insertButton, SIGNAL(clicked()), this, SLOT(addPageSlot())); connect(ui.removeButton, SIGNAL(clicked()), this, SLOT(removePageSlot())); connect(ui.dragButton, SIGNAL(clicked()), this, SLOT(dragPageSlot()));
}
c::~c()
{
}
void c::addPageSlot()
{//定义一个QWidget.QWidget *temp new QWidget;//在当前页面的后面插入一个新的页面.ui.tabWidget-insertTab(ui.tabWidget-currentIndex() 1, temp, QIcon(Icons/2.png), QString::number(count)); //显示新的页面.ui.tabWidget-setCurrentIndex(ui.tabWidget-indexOf(temp));count;
}
void c::removePageSlot()
{//删除当前的页面.ui.tabWidget-removeTab(ui.tabWidget-currentIndex());}
void c::dragPageSlot()
{//设置页面项是可被移动的.ui.tabWidget-setMovable(true);} c.h
#ifndef C_H
#define C_H
#include QtWidgets/QMainWindow
#include ui_c.h
#include QTabWidget
#include QPushButton
class c : public QMainWindow
{Q_OBJECTpublic:c(QWidget *parent 0);~c();private slots: void addPageSlot(); void removePageSlot(); void dragPageSlot();private:Ui::cClass ui; int count 0;
};#endifQTabWidget添加选项卡的方法可用使用addTab方法和insertTab方法。 1、增加选项卡的addTab方法
addTab用于给QTabWidget增加一个选项卡选项卡位置在现所有选项卡后面调用语法如下
int addTab(QWidget page, str label)
int addTab(QWidget page, QIcon icon, str label)说明
//page为一个QWidget 实例对象其名字为对应选项卡的名字
//label为选项卡栏显示的选项卡标题文字文字中可通过与符号带一个快捷键字母对应快捷键为Alt与符号后面字母
//icon为选项卡栏显示的选项卡图标
//返回值为新加选项卡在选项卡栏中的位置索引注意
如果在QTabWidget所在窗口show之后调用addTab布局系统将尝试调整部件层次结构可能导致闪烁。为了防止这种情况可以在更改之前将窗口的QWidget.updateselebled属性设置为False在更改完成时将属性设置为True使部件再次接收绘制事件。 示例代码 self.tab_reportManner QtWidgets.QWidget()self.tab_reportManner.setObjectName(tab_reportManner)icon.addPixmap(QtGui.QPixmap(:/IT/图像文件/blog.png), QtGui.QIcon.Normal, QtGui.QIcon.Off)self.tabWidget.addTab(self.tab_reportManner, icon, 疫情上报方式)2、插入选项卡的insertTab方法
QTabWidget的insertTab方法用于在QTabWidget指定位置插入一个选项卡调用语法如下
int insertTab(int index, QWidget page, str label)
int insertTab(int index, QWidget page, QIcon icon str label)说明 insertTab方法的参数除了多了个index参数外其他参数和返回值都是一样 如果index值超出范围则新选项卡在所有选项卡最后面 如果在调用此函数之前QTabWidget没有选项卡则插入选项卡将成为当前页否则当前页保持不变 Qt–多页面切换组件
一.多页面切换组件 多页面的切换在我们日常的软件使用中是十分广泛的有着很好的便捷性下面一张图片展示了多页面的使用的便捷性 可以看到用鼠标点击不同的标题时会出现不同的页面内容
A.Qt中的多页面切换组件QTabWidget
Qt中为多页面切换的实现提供了一个专门的类QTabWidget,它可以实现能够在同一个窗口中自由切换不同页面的内容并且是一个容器类型的组件提供友好的页面切换方式在QTabWidget类中提供了很多在工程中实用的函数比如设置Tab标签的位置void setTabPosition(TabPosition)(North South West East),设置Tab的外观 void setTabShape(),设置Tab的可关闭模式void setTabsClosable()等各种在实际应用中用的较多的函数具体的函数可以在Qt助手进行查询。
QTabWidget的使用方式–在Qt中的应用程序中创建QTabWidget的对象将其他的QWiget对象加入该对象中(在QTabWidget对象中加入一个组件将生成一个新的页面同时QTabWidget对象每次只能加入一个QWiget对象)但是在实际的使用中每个页面会有多个的子组件这时应该在工程中创建容器类型的组建对象将多个子组件在容器对象中布局最后将容器对象加入QTabWidget中生成新的页面. 1.能够在同一窗口中自由切换不同页面的内容
2.是一个容器类型的组件同时提供友好的页面切换方式
Qt–多页面切换组件 QTabWidget的使用方式 1.在应用程序中创建QTabWidget的对象 2.将其他QWidget对象加入该对象中
实现过程 1.创建容器类的组件对象 2.将多个子组件在容器对象中布局 3.将容器对象加入QTabWidget中生成新的页面 Qt–多页面切换组件 QTabWidget组件的基本用法 Qt–多页面切换组件
B.QTabWidget组件的高级用法 1.设置Tab标签的位置 2.设置Tab的外观 3.设置Tab的可关闭模式
QTabWidget组件预定义的信号 void currentChange(int index)–当前显示的页面发送变化index为新页面下标 void tabCloseRequsted(int index)–位置为index页面的关闭按钮被点击发出关闭请求 代码示例 Widget.h
#ifndef WIDGET_H
#define WIDGET_H#include QWidget
#include QTableWidgetclass Widget : public QWidget
{Q_OBJECTQTabWidget m_tabWidget;
protected slots:void onTabCurrentChanged(int index);void onTabCloseRequested(int index);
public:Widget(QWidget *parent 0);~Widget();
};#endif // WIDGET_HWidget.cpp
#include Widget.h
#include QPlainTextEdit
#include QLabel
#include QPushButton
#include QVBoxLayout
#include QDebugWidget::Widget(QWidget *parent): QWidget(parent)
{//QTabWidget的基本设置m_tabWidget.setParent(this);m_tabWidget.move(10, 10);m_tabWidget.resize(200, 200);m_tabWidget.setTabPosition(QTabWidget::North);m_tabWidget.setTabShape(QTabWidget::Triangular);m_tabWidget.setTabsClosable(false);QPlainTextEdit* edit new QPlainTextEdit(m_tabWidget);edit-insertPlainText(页面1);m_tabWidget.addTab(edit, 1st);QWidget* widget new QWidget(m_tabWidget);QVBoxLayout* layout new QVBoxLayout();QLabel* lbl new QLabel(widget);QPushButton* btn new QPushButton(widget);lbl-setText(页面2);lbl-setAlignment(Qt::AlignCenter);btn-setText(页面2);layout-addWidget(lbl);layout-addWidget(btn);widget-setLayout(layout);m_tabWidget.addTab(widget, 2nd);m_tabWidget.setCurrentIndex(1);connect(m_tabWidget, SIGNAL(currentChanged(int)), this, SLOT(onTabCurrentChanged(int)));connect(m_tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(onTabCloseRequested(int)));
}void Widget::onTabCurrentChanged(int index)
{qDebug() Page change to: index;
}void Widget::onTabCloseRequested(int index)
{m_tabWidget.removeTab(index);
}Widget::~Widget()
{}运行的结果如图所示 QTabWidget实现了双击关闭标签页
重载了QTabWidget由于tabBar()是protected这样就可以获取到标签了。
class Tab : public QTabWidget
{Q_OBJECT
public:Tab(QWidget *parent 0);QTabBar* GetBar();
protected:void mousePressEvent(QMouseEvent *event);
};然后在实现一个事件过滤器首先判断事件是双击事件然后判断是否为标签位置如果是则删除当前标签页由于双击事件中必触发单击即标签页选中事件因此无需考虑双击其他标签页引起的index变更问题。
#ifndef MYEVENTFILTER_H
#define MYEVENTFILTER_H
#include QMainWindow
#include QMouseEvent
#include tab.hextern int tabindex_current;
extern int tabindex_old;
extern Tab *tabWidget;
extern QPoint tableft;
extern int tabwidth;
extern int tabheight;//实现双击关闭Tab标签
class myEventFilter: public QObject
{public:myEventFilter():QObject(){};~myEventFilter(){};bool eventFilter(QObject* object,QEvent* event){if (event-type()QEvent::MouseButtonDblClick){QMouseEvent *e static_castQMouseEvent*(event);QPoint pos e-pos();int x1 tableft.x();int x2 tableft.x()tabwidth;int y1 tableft.y();int y2 tableft.y()tabheight;if (pos.x() x1 pos.y() y1 pos.x() x2 pos.y() y2)tabWidget-removeTab(tabindex_current);}return QObject::eventFilter(object,event);};
};#endif // MYEVENTFILTER_H//最后绑定到主函数main中这样就可捕捉到所有的事件了
qApp-installEventFilter(new myEventFilter());//另外需在标签页切换时更新宽度信息高度无需更新
void MainWindow::updateBar()
{tabindex_current tabWidget-currentIndex();tabindex_old tabindex_current;QTabBar *bar tabWidget-GetBar();if (bar-size().width() 0)tabwidth bar-size().width();
}QTabWidget添加关闭子标签功能
QTabWidget添加关闭子标签功能QTabWidget 有个属性 tabsClosable 将其设置为True即可出现关闭按钮。 默认情况下每个标签上的关闭按钮是没有任何响应的我们需要自己动手为他添加关闭响应。 关闭信号为 void tabCloseRequested(int index) 关闭函数为 void removeTab(int index) 注意关闭标签的是一个普通公共函数不是槽函数不可以直接与信号相连我们需要自己手动定义个接受 int类型的槽函数然后把参数再传递给关闭函数。
#include mainwindow.h
#include ui_mainwindow.h
#include QTabWidget
#include QTextEdit
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui-setupUi(this);connect(ui-tabWidget,SIGNAL(tabCloseRequested(int)),this,SLOT(removeSubTab(int)));
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::removeSubTab(int index)
{ui-tabWidget-removeTab(index);
}void MainWindow::on_pushButton_clicked()
{QTextEdit *editnew QTextEdit;ui-tabWidget-addTab(edit,hitemp 1);
}