代码之家  ›  专栏  ›  技术社区  ›  Narek

如何将静态方法添加到QInputDialog以返回自定义数据?

  •  1
  • Narek  · 技术社区  · 15 年前
    QString QInputDialog::getText ( QWidget * parent, const QString & title, 
        const QString & label, QLineEdit::EchoMode mode = QLineEdit::Normal,
        const QString & text = QString(), bool * ok = 0, 
        Qt::WindowFlags flags = 0 )   [static] 
    

    此函数用于调用对话框get并返回将插入QLine编辑中的文本。所以我想创建一个getData静态方法,它返回一个数据结构(比如QPair)并像 QInputDialog::getText() . 我试过了,但做不到。我该怎么做?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Narek    15 年前

    我已经做到了,但我张贴的人需要这个。下面是一个对话框的示例,用于调整图像的大小。更准确地说,它是用来表示用户的图像的当前大小,并为他/她提供一个界面,以改变大小,并获得一个QPair新的大小。

    class ResizeImageDialog : public QDialog
    {
        Q_OBJECT
    
    double                   m_ratio;
    
    QLabel                  *m_widthLabel;
    QLabel                  *m_hightLabel;
    QDoubleSpinBox          *m_widthSpinBox;
    QDoubleSpinBox          *m_hightSpinBox;
    QCheckBox               *m_keepRatioCheckBox;
    
    QPushButton             *m_okButton;
    QPushButton             *m_cancelButton;
    
    QHBoxLayout             *m_widthLayout;
    QHBoxLayout             *m_hightLayout;
    QHBoxLayout             *m_buttonLayout;
    QVBoxLayout             *m_generalLayout;
    
    private slots:
        void widthChanged(double width);
        void hightChanged(double hight);
    
    public:
        ResizeImageDialog(QWidget * parent = 0, double imageWidth = 100.0, double imageHight = 100.0):QDialog(parent)
        {
        m_widthLabel = new QLabel("Image width");
        m_hightLabel = new QLabel("Image hight");
    
        m_widthSpinBox = new QDoubleSpinBox;
        m_widthSpinBox->setMaximum(1500);
        m_widthSpinBox->setValue(imageWidth);
        connect(m_widthSpinBox, SIGNAL(valueChanged(double)), this, SLOT(widthChanged(double)));
    
    
        m_hightSpinBox = new QDoubleSpinBox;
        m_hightSpinBox->setMaximum(1500);
        m_hightSpinBox->setValue(imageHight);
        connect(m_hightSpinBox, SIGNAL(valueChanged(double)), this, SLOT(hightChanged(double)));
    
        m_ratio = imageWidth/imageHight;
    
    
        m_keepRatioCheckBox = new QCheckBox("Keep ratio",this);
        m_keepRatioCheckBox->setChecked(true);
    
    
        m_widthLayout = new QHBoxLayout;
        m_widthLayout->addWidget(m_widthLabel);
        m_widthLayout->addWidget(m_widthSpinBox);
    
        m_hightLayout  = new QHBoxLayout;
        m_hightLayout->addWidget(m_hightLabel);
        m_hightLayout->addWidget(m_hightSpinBox);
    
        m_okButton = new QPushButton("OK");
        connect(m_okButton, SIGNAL(clicked()), this, SLOT(accept()));
    
        m_cancelButton = new QPushButton("Cancel");
        connect(m_cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
    
        m_buttonLayout = new QHBoxLayout;
        m_buttonLayout->addStretch();
        m_buttonLayout->addWidget(m_okButton);
        m_buttonLayout->addWidget(m_cancelButton);
    
        m_generalLayout = new QVBoxLayout;
        m_generalLayout->addLayout(m_widthLayout);
        m_generalLayout->addLayout(m_hightLayout);
        m_generalLayout->addWidget(m_keepRatioCheckBox);
        m_generalLayout->addLayout(m_buttonLayout);
        setLayout(m_generalLayout);
    
        setMaximumSize(300, 300);
        setModal(true);
        //resize(670,630);
        setWindowTitle(tr("Resize Image"));
        setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
    }
    
    static QPair<double, double> getNewSize(QWidget * parent = 0, double imageWidth = 100.0, double imageHight = 100.0)
    {
        ResizeImageDialog dlg(parent, imageWidth, imageHight);
        dlg.exec();
    
    
    
        QPair<double, double> size;
        size.first = dlg.m_widthSpinBox->value();
        size.second = dlg.m_hightSpinBox->value();
        return size;
    }
    };
    

    现在你可以做到:

     QPair<double, double> size = ResizeImageDialog::getNewSize(this, newImageFormat.width(), newImageFormat.height());
    
        2
  •  0
  •   Arnold Spence    15 年前

    我不确定您遇到的问题是什么,但一般来说,您希望创建一个继承 QInputDialog . 添加一个静态方法, getPairedText() ,签名与 getText() 但它返回一个 QPair 获取文本() 返回,将字符串解析为 QPair公司 把它还给我。

    如果你在实现这一点上有任何具体问题,请在下面的评论中提问,我将尝试在我的答案中添加更多细节。