C++/Qt/QTabWidget

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Tab dialog

<source lang="cpp"> /****************************************************************************

    • Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    • All rights reserved.
    • Contact: Nokia Corporation (qt-info@nokia.com)
    • This file is part of the examples of the Qt Toolkit.
    • $QT_BEGIN_LICENSE:LGPL$
    • Commercial Usage
    • Licensees holding valid Qt Commercial licenses may use this file in
    • accordance with the Qt Commercial License Agreement provided with the
    • Software or, alternatively, in accordance with the terms contained in
    • a written agreement between you and Nokia.
    • GNU Lesser General Public License Usage
    • Alternatively, this file may be used under the terms of the GNU Lesser
    • General Public License version 2.1 as published by the Free Software
    • Foundation and appearing in the file LICENSE.LGPL included in the
    • packaging of this file. Please review the following information to
    • ensure the GNU Lesser General Public License version 2.1 requirements
    • will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    • In addition, as a special exception, Nokia gives you certain additional
    • rights. These rights are described in the Nokia Qt LGPL Exception
    • version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    • GNU General Public License Usage
    • Alternatively, this file may be used under the terms of the GNU
    • General Public License version 3.0 as published by the Free Software
    • Foundation and appearing in the file LICENSE.GPL included in the
    • packaging of this file. Please review the following information to
    • ensure the GNU General Public License version 3.0 requirements will be
    • met: http://www.gnu.org/copyleft/gpl.html.
    • If you have questions regarding the use of this file, please contact
    • Nokia at qt-info@nokia.com.
    • $QT_END_LICENSE$
                                                                                                                                                        • /
  1. ifndef TABDIALOG_H
  2. define TABDIALOG_H
  3. include <QDialog>

QT_BEGIN_NAMESPACE class QDialogButtonBox; class QFileInfo; class QTabWidget; QT_END_NAMESPACE

class GeneralTab : public QWidget {

   Q_OBJECT

public:

   GeneralTab(const QFileInfo &fileInfo, QWidget *parent = 0);

};


class PermissionsTab : public QWidget {

   Q_OBJECT

public:

   PermissionsTab(const QFileInfo &fileInfo, QWidget *parent = 0);

};


class ApplicationsTab : public QWidget {

   Q_OBJECT

public:

   ApplicationsTab(const QFileInfo &fileInfo, QWidget *parent = 0);

};


class TabDialog : public QDialog {

   Q_OBJECT

public:

   TabDialog(const QString &fileName, QWidget *parent = 0);

private:

   QTabWidget *tabWidget;
   QDialogButtonBox *buttonBox;

};

  1. endif


  1. include <QtGui>
  2. include "tabdialog.h"

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


   buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok

                                    | QDialogButtonBox::Cancel);
   connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
   connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));

   QVBoxLayout *mainLayout = new QVBoxLayout;
   mainLayout->addWidget(tabWidget);
   mainLayout->addWidget(buttonBox);
   setLayout(mainLayout);
   setWindowTitle(tr("Tab Dialog"));

}

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

}

PermissionsTab::PermissionsTab(const QFileInfo &fileInfo, QWidget *parent)

   : QWidget(parent)

{

   QGroupBox *permissionsGroup = new QGroupBox(tr("Permissions"));
   QCheckBox *readable = new QCheckBox(tr("Readable"));
   if (fileInfo.isReadable())
       readable->setChecked(true);
   QCheckBox *writable = new QCheckBox(tr("Writable"));
   if ( fileInfo.isWritable() )
       writable->setChecked(true);
   QCheckBox *executable = new QCheckBox(tr("Executable"));
   if ( fileInfo.isExecutable() )
       executable->setChecked(true);
   QGroupBox *ownerGroup = new QGroupBox(tr("Ownership"));
   QLabel *ownerLabel = new QLabel(tr("Owner"));
   QLabel *ownerValueLabel = new QLabel(fileInfo.owner());
   ownerValueLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
   QLabel *groupLabel = new QLabel(tr("Group"));
   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(tr("Open with:"));
   QListWidget *applicationsListBox = new QListWidget;
   QStringList applications;
   for (int i = 1; i <= 30; ++i)
       applications.append(tr("Application %1").arg(i));
   applicationsListBox->insertItems(0, applications);
   QCheckBox *alwaysCheckBox;
   if (fileInfo.suffix().isEmpty())
       alwaysCheckBox = new QCheckBox(tr("Always use this application to "
           "open this type of file"));
   else
       alwaysCheckBox = new QCheckBox(tr("Always use this application to "
           "open files with the extension "%1"").arg(fileInfo.suffix()));
   QVBoxLayout *layout = new QVBoxLayout;
   layout->addWidget(topLabel);
   layout->addWidget(applicationsListBox);
   layout->addWidget(alwaysCheckBox);
   setLayout(layout);

}


  1. include <QApplication>
  2. include "tabdialog.h"

int main(int argc, char *argv[]) {

   QApplication app(argc, argv);
   QString fileName;
   if (argc >= 2)
       fileName = argv[1];
   else
       fileName = ".";
   TabDialog tabdialog(fileName);
   return tabdialog.exec();

}


 </source>