QT DEMO翻译之--对话框部分(一)--tabdialog

  

选项卡对话框的例子展示了如何使用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都用来显示和文件信息相关的内容,这些widgetGeneralTab中使用垂直布局。

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

    ApplicationsTabPermissionsTab的定义与实现和GeneralTab类相似。

本文出自 “阿潘的兔子” 博客,转载请与作者联系!

你可能感兴趣的:(demo,qt,qt,翻译,对话框,tabwidget)