
#include
<QTabWidget>

#include
<QWidget>

#include
<QDialog>

#include
<QFileInfo>

#include
<QVBoxLayout>

#include
<QDialogButtonBox>

#include
<QLabel>

#include
<QLineEdit>

#include
<QDateTime>

#include
<QGroupBox>

#include
<QCheckBox>

#include
<QListWidget>

#include
"tabdlg.h"

TabDialog::TabDialog(
const QString
&fileName, QWidget *parent):QDialog(parent)

{

QFileInfo
fileInfo(fileName);

tabWidget=
new QTabWidget;

tabWidget->addTab(
new GeneralTab(fileName),trUtf8(
"常规"));

tabWidget->addTab(
new PermissionsTab(fileName),trUtf8(
"权限"));

tabWidget->addTab(
new ApplicationsTab(fileName),trUtf8(
"应用程序"));

buttonBox=
new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);

connect(buttonBox,SIGNAL(accepted()),
this,SLOT(accept()));
//OK 
connect(buttonBox,SIGNAL(rejected()),
this,SLOT(reject()));
//Cancel

QVBoxLayout
*mainLayout=
new QVBoxLayout;

mainLayout->addWidget(tabWidget);

mainLayout->addWidget(buttonBox);

setLayout(mainLayout);

setWindowTitle(trUtf8(
"Tab对话框"));

}
//常规面板类构造函数实现 
GeneralTab::GeneralTab(
const QFileInfo
&fileInfo, QWidget *parent)

:QWidget(parent)

{

QLabel *fileNameLabel =
new QLabel(trUtf8(
"文件名:"));

QLineEdit *fileNameEdit =
new QLineEdit(fileInfo.fileName());
//去掉目录路径前缀后的

QLabel *pathLabel =
new QLabel(trUtf8(
"路径:"));

QLabel *pathValueLabel =
new QLabel(fileInfo.absoluteFilePath());
//完整的路径名 
pathValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
//设置label的样式

QLabel *sizeLabel =
new QLabel(trUtf8(
"大小:"));

qlonglong size = fileInfo.size()/1024;
//size()返回字节大小 
QLabel *sizeValueLabel =
new QLabel(trUtf8(
"%1
K").arg(size));

sizeValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);

QLabel *lastReadLabel =
new QLabel(trUtf8(
"上次读取时间:"));

QLabel *lastReadValueLabel =
new QLabel(fileInfo.lastRead().toString());

lastReadValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);

QLabel *lastModLabel =
new QLabel(trUtf8(
"上次修改时间:"));

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);

}
//权限面板类 
PermissionsTab::PermissionsTab(
const QFileInfo
&fileInfo, QWidget *parent)

:QWidget(parent)

{
//群组框 
QGroupBox *permissionsGroup =
new QGroupBox(trUtf8(
"权限"));

QCheckBox *readable =
new QCheckBox(trUtf8(
"可读"));
if (fileInfo.isReadable())

readable->setChecked(
true);
//勾选

QCheckBox *writable =
new QCheckBox(trUtf8(
"可写"));
if (
fileInfo.isWritable() )

writable->setChecked(
true);

QCheckBox *executable =
new QCheckBox(trUtf8(
"可执行"));
if (
fileInfo.isExecutable() )

executable->setChecked(
true);

QGroupBox *ownerGroup =
new QGroupBox(trUtf8(
"所有权"));

QLabel *ownerLabel =
new QLabel(trUtf8(
"所有者"));

QLabel *ownerValueLabel =
new QLabel(fileInfo.owner());

ownerValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);

QLabel *groupLabel =
new QLabel(trUtf8(
"组"));

QLabel *groupValueLabel =
new QLabel(fileInfo.group());

groupValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);

QVBoxLayout *permissionsLayout =
new QVBoxLayout;

permissionsLayout->addWidget(readable);

permissionsLayout->addWidget(writable);

permissionsLayout->addWidget(executable);

permissionsGroup->setLayout(permissionsLayout);
//权限组

QVBoxLayout *ownerLayout =
new QVBoxLayout;

ownerLayout->addWidget(ownerLabel);

ownerLayout->addWidget(ownerValueLabel);

ownerLayout->addWidget(groupLabel);

ownerLayout->addWidget(groupValueLabel);

ownerGroup->setLayout(ownerLayout);
//所有权组

QVBoxLayout *mainLayout =
new QVBoxLayout;

mainLayout->addWidget(permissionsGroup);

mainLayout->addWidget(ownerGroup);
//mainLayout->addStretch(1); 
setLayout(mainLayout);

}
//应用程序选项卡类构造函数实现 
ApplicationsTab::ApplicationsTab(
const QFileInfo
&fileInfo, QWidget *parent)

:QWidget(parent)

{

QLabel *topLabel =
new QLabel(trUtf8(
"打开方式...:"));

QListWidget *applicationsListBox =
new QListWidget;

QStringList applications;
for (
int i
= 1; i <= 30; ++i)

applications.append(trUtf8(
"应用程序 %1").arg(i));

applicationsListBox->insertItems(0, applications);

QCheckBox *alwaysCheckBox;
if (fileInfo.suffix().isEmpty())

alwaysCheckBox =
new QCheckBox(trUtf8(
"始终使用该程序"
"打开该类型的文件"));
else 
alwaysCheckBox =
new QCheckBox(trUtf8(
"始终使用该程序"
"打开此扩展名文件
'%1'").arg(fileInfo.suffix()));

QVBoxLayout *layout =
new QVBoxLayout;

layout->addWidget(topLabel);

layout->addWidget(applicationsListBox);

layout->addWidget(alwaysCheckBox);

setLayout(layout);

}