异想天开

What's the true meaning of light, Could you tell me why

Qt之QTabWidget控件

日期:2017-02-03 17:53:38
  
最后更新日期:2017-02-03 18:03:47
浏览网页时浏览器展示多个网页,即为TabWidget控件典型例子。

1. 可以将QTabWidget放到QMainWindow中
MainWindow类
[code lang="cpp"]
class QTabWidget;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
//void paintEvent(QPaintEvent *);
private:
//Ui::MainWindow *ui;
QTabWidget *tabWidget;
};
[/code]
MainWindow类中的ui成员,即文件->新建项目->Qt Widgets Application后,勾选了默认Qt创建UI自定义文件,这样可以在UI界面上面拖拽控件。若喜欢用代码控制控件,则可以去掉。

[code lang="cpp"]
MainWindow::MainWindow(QWidget *parent) : //QDialog(parent)
QMainWindow(parent)//,
// ui(new Ui::MainWindow)
{
tabWidget = new QTabWidget();

//新建第一个页面的部件
QWidget *widget = new QWidget();
QLineEdit *lineEdit = new QLineEdit();
QPushButton *pushButton = new QPushButton("Test");
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->addWidget(lineEdit);
vLayout->addWidget(pushButton);
widget->setLayout(vLayout);


//新建第二个页面的部件
QLabel *label = new QLabel("Hello Qt");

//新建第三个页面的部件
QPushButton *pushButton3 = new QPushButton("Click Me");

//向QTabWidget中添加第一个页面
QIcon icon1(":/images/weixin.png");
tabWidget->addTab(widget, icon1, "Tab1");

//向QTabWidget中添加第二个页面
QIcon icon2(":/images/weixin.png");
tabWidget->addTab(label, icon2, "Tab2");

//向QTabWidget中添加第三个页面
QIcon icon3(":/images/weixin.png");
tabWidget->addTab(pushButton3, icon3, "Tab3");


this->setCentralWidget(tabWidget);

this->resize(600, 600);
this->setWindowTitle("QTabWidgetDemo");
}
[/code]

这里重要的一句是是函数setCentralWidget调用,QMainWindow的layout如下:
mainwindow layout
setCentralWidget调用则设置central widget为Qtabwidget。

2.Dialog中的tabwidget
[code lang="cpp"]
class QTabWidget;
class MainWindow : public QDialog
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
//void paintEvent(QPaintEvent *);
private:
//Ui::MainWindow *ui;
QTabWidget *tabWidget;
};
[/code]

[code lang="cpp"]
tabWidget = new QTabWidget();

//新建第一个页面的部件
QWidget *widget = new QWidget();
QLineEdit *lineEdit = new QLineEdit();
QPushButton *pushButton = new QPushButton("Test");
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->addWidget(lineEdit);
vLayout->addWidget(pushButton);
widget->setLayout(vLayout);


//新建第二个页面的部件
QLabel *label = new QLabel("Hello Qt");

//新建第三个页面的部件
QPushButton *pushButton3 = new QPushButton("Click Me");

//向QTabWidget中添加第一个页面
QIcon icon1(":/images/weixin.png");
tabWidget->addTab(widget, icon1, "Tab1");

//向QTabWidget中添加第二个页面
QIcon icon2(":/images/weixin.png");
tabWidget->addTab(label, icon2, "Tab2");

//向QTabWidget中添加第三个页面
QIcon icon3(":/images/weixin.png");
tabWidget->addTab(pushButton3, icon3, "Tab3");

this->resize(600, 600);
this->setWindowTitle("QTabWidgetDemo");

QHBoxLayout *layout = new QHBoxLayout();
layout->addWidget(tabWidget);
this->setLayout(layout);
[/code]
在Dialog里面,将tabwidget放到layout里面,然后Dialog调用setLayout(layout)设置layout.

3.还一点需要申明的是,代码引用的图片地址需要设置一个资源文件:
[code lang="cpp"]
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>images/weixin.png</file>
</qresource>
</RCC>
[/code]
将该文件添加到项目即可在代码引用。

参考:
1. http://blog.csdn.net/qiurisuixiang/article/details/6916603