选项卡对话框的例子展示了如何使用QTabWidget类构建一个选项卡对话框。
对话框提供了应用程序和用户交互的有效途径,但是复杂的对话框经常会占用很大的屏幕面积。通过在对话框中使用选项卡,信息可以分成不同的类别。
选项卡对话框的例子由一个TabDialog类和两个普通的按钮组成。TabDialog类提供了3个选项卡和每个特定文件的包含信息;两个按钮用于接收或拒绝对话框的内容。
TabDialog 类的定义
TabDialog类是QDialog的一个子类,它显示一个QTabWidget部件和两个标准对话框按钮。类的定义只包含的QTabWidget类的构造函数和私有数据成员。
class TabDialog : public QDialog
{
Q_OBJECT
public:
TabDialog(const QString &fileName, QWidget *parent = 0);
private:
QTabWidget *tabWidget;
QDialogButtonBox *buttonBox;
};
在这个例子中,TabDialog会被用来作为一个顶级窗口,我们定义构造函数,以便它可以拥有一个父widget部件,从而可以显示在应用程序主窗口顶部的中心。
TabDialog Class类的实现
构造函数调用QDialog的构造函数,并创建一个指定文件名的QFileInfo对象。
TabDialog::TabDialog(const QString &fileName, QWidget *parent)
: QDialog(parent)
{
QFileInfo fileInfo(fileName);
tabWidget = new QTabWidget;
tabWidget->addTab(new GeneralTab(fileInfo), tr("General"));
tabWidget->addTab(new PermissionsTab(fileInfo), tr("Permissions"));
tabWidget->addTab(new ApplicationsTab(fileInfo), tr("Applications"));
tabWidget部件由三个包含了文件信息的自定义部件组成。我们构建这些部件时没有指定父对象,因为他们会被tabWidget部件添加为子对象。
我们创建了两个标准的按钮,并将他们和对话框的相应槽函数关联。
buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
| QDialogButtonBox::Cancel);
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
在对话框中,我们将tab widget放在按钮的上面。
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(tabWidget);
mainLayout->addWidget(buttonBox);
setLayout(mainLayout);
最后,我们设置对话框的标题。
setWindowTitle(tr("Tab Dialog"));
}
每个选项卡都是从QWidget继承的子类,并只提供构造函数。
GeneralTab Class类的定义
GeneralTab部件的定义很简单,因为我们只对如何在一个标签中显示一个widget的内容感兴趣。
class GeneralTab : public QWidget
{
Q_OBJECT
public:
GeneralTab(const QFileInfo &fileInfo, QWidget *parent = 0);
};
GeneralTab Class类的实现
GeneralTab部件简单地显示一些由TabDialog传入的文件的信息,GeneralTab中的各种widget都用来显示和文件信息相关的内容,这些widget在GeneralTab中使用垂直布局。
GeneralTab::GeneralTab(const QFileInfo &fileInfo, QWidget *parent)
: QWidget(parent)
{
QLabel *fileNameLabel = new QLabel(tr("File Name:"));
QLineEdit *fileNameEdit = new QLineEdit(fileInfo.fileName());
QLabel *pathLabel = new QLabel(tr("Path:"));
QLabel *pathValueLabel = new QLabel(fileInfo.absoluteFilePath());
pathValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
QLabel *sizeLabel = new QLabel(tr("Size:"));
qlonglong size = fileInfo.size()/1024;
QLabel *sizeValueLabel = new QLabel(tr("%1 K").arg(size));
sizeValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
QLabel *lastReadLabel = new QLabel(tr("Last Read:"));
QLabel *lastReadValueLabel = new QLabel(fileInfo.lastRead().toString());
lastReadValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
QLabel *lastModLabel = new QLabel(tr("Last Modified:"));
QLabel *lastModValueLabel = new QLabel(fileInfo.lastModified().toString());
lastModValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(fileNameLabel);
mainLayout->addWidget(fileNameEdit);
mainLayout->addWidget(pathLabel);
mainLayout->addWidget(pathValueLabel);
mainLayout->addWidget(sizeLabel);
mainLayout->addWidget(sizeValueLabel);
mainLayout->addWidget(lastReadLabel);
mainLayout->addWidget(lastReadValueLabel);
mainLayout->addWidget(lastModLabel);
mainLayout->addWidget(lastModValueLabel);
mainLayout->addStretch(1);
setLayout(mainLayout);
}
ApplicationsTab和PermissionsTab的定义与实现和GeneralTab类相似。
本文出自 “阿潘的兔子” 博客,转载请与作者联系!