[Qt-interest] aspect-ratio for graphs

Christian Gagneraud cgagneraud at techworks.ie
Wed Jul 14 20:41:04 CEST 2010


On 07/14/2010 07:31 PM, Jason H wrote:
> Check out libqxt. They have an AR aware widget, that you can put your graph in.
>

Did you have a look at qwt?

"The Qwt library contains GUI Components and utility classes which are 
primarily useful for programs with a technical background [...]"
They have lot of widgets for plots, knobs, sliders, ...

http://qwt.sourceforge.net

Chris

>
>
>
> ----- Original Message ----
> From: phil prentice<philp.cheer at talktalk.net>
> To: qt-interest at trolltech.com
> Sent: Wed, July 14, 2010 12:57:06 PM
> Subject: [Qt-interest] aspect-ratio for graphs
>
> Hi
>    I am sorry to say that I think that this question has been asked a few times
> before, with varying answers.  I am trying to draw six graphs side by side
> with a number of widgets displayed below it.  I am using horizontal and
> vertical layouts to do this.  And yes I would like to force the aspect ratio
> of the graphs to be 1:1.  Reading various qt-interest forum answers it seemed
> to suggest that I could use the member functions setSizePolicy() and
> heightForWidth()...which I have tried to do with no success.
> Is the general principle of what I am trying to do correct? Any ideas as to
> why it does not work for me?
>
> Any help would be welcome....I love QT but sometimes its just too hard!!!
>
> Thanks
> Phil
>
> I have defined a class called VIgraph() derived from QFrame() i.e.
> VIgraph::VIgraph(QWidget *parent, Qt::WindowFlags f):QFrame(parent,f)
> {
>    // Create a frame around the graphs.
>    setFrameStyle(QFrame::Box|QFrame::Plain);
>    QSizePolicy policy(QSizePolicy::Preferred, QSizePolicy::Preferred);
>    policy.setHeightForWidth(true);  // Keep aspect ratio
>    setSizePolicy(policy);
> }
>
> int VIgraph::heightForWidth(int w) const
> {
>    if(height()>  w)
>      return w;
>    else
>      return height();
> }
>
> My main window widget creates various widgets(including the VIgraph widgets)
> and lays them out (see two following functions)
>
> void VIwindow::createWidgets()
> {
>    int i;
>
>    // Create the 6 graphs, the 6 labeled Pass/Fail labels and the 6 checkboxes.
>    for(i = 0; i<  6; i++)
>    {
>      m_graph[i] = new VIgraph();
>      m_graphPassFailLabel[i] = new QLabel();
>      m_graphPassFailTextLabel[i] = new QLabel(QString("VI%1Pass/Fail").arg(i));
>      m_graphCheckBoxs[i] = new QCheckBox(QString("Select VI%1").arg(i));
>    }
>    // Create Tolerance slider and tolerance checkbox along with label.
>    m_toleranceSlider = new QSlider(Qt::Horizontal);
>    m_toleranceLineEdit = new QLineEdit();
>    m_toleranceCheckBox = new QCheckBox("View Tolerance");
>    // Create Save&  Cancel pushbuttons.
>    m_saveToleranceButton = new QPushButton(tr("Save Tol"));
>    m_cancelToleranceButton = new QPushButton(tr("Cancel"));
>    // Auto/Manual Combi-box.
>    m_autoManualComboBox = new QComboBox();
>    m_autoManualComboBox->addItem("Auto");
>    m_autoManualComboBox->addItem("Manual");
> // Single-shot&  Continuous pushbuttons.
>    m_singleShotButton = new QPushButton(tr("Single Shot"));
>    m_continuousButton = new QPushButton(tr("Continuous"));
>
>    // Set fixed widgets attributes.
>    m_toleranceLineEdit->setReadOnly(true);
>    m_toleranceSlider->setMinimum(0);
>    m_toleranceSlider->setMaximum(100);
>    m_toleranceSlider->setTickInterval(1);
>
>    QPixmap greyPixmap(":resources/images/greyButton.png"); // Default pixmap
>    QSize max(16, 16);
>    for(i = 0; i<  6; i++)
>    {
>      m_graphPassFailLabel[i]->setPixmap(greyPixmap);
>      // Set Label sizes and scale the contents.
>      m_graphPassFailLabel[i]->setMaximumSize(max);
>      m_graphPassFailLabel[i]->setScaledContents(true);
>    }
> ]
>
> void VIwindow::doLayout()
> {
>    int i;
>
>    // Create Pass/Fail label with text as horizontal layout.
>    QHBoxLayout *passFailLayout[6];
>    for(i = 0; i<  6; i++)
>    {
>      passFailLayout[i] = new QHBoxLayout;
>      passFailLayout[i]->addWidget(m_graphPassFailLabel[i]);
>      passFailLayout[i]->addWidget(m_graphPassFailTextLabel[i]);
>      passFailLayout[i]->addStretch();
>    }
>    // Create the six vertical graph layouts with label.
>    QVBoxLayout *graphLayout[6];
>    for(i = 0; i<  6; i++)
>    {
>      graphLayout[i] = new QVBoxLayout;
>      graphLayout[i]->addWidget(m_graph[i]);       // Aspect-ratio needed.
>      graphLayout[i]->addLayout(passFailLayout[i]);
>    }
>
>    // Plonk all graph layouts into one horizontal layout.
>    QHBoxLayout *firstRowLayout = new QHBoxLayout;
>    for(i = 0; i<  6; i++)
>    {
>      firstRowLayout->addLayout(graphLayout[i]);
>    }
>    // Layout the checkbox row to follow.
>    QHBoxLayout *secondRowLayout = new QHBoxLayout;
>    for(i = 0; i<  6; i++)
>    {
>      secondRowLayout->addWidget(m_graphCheckBoxs[i]);
>    }
>    // Layout the tolerance row.
>    QHBoxLayout *thirdRowLayout = new QHBoxLayout;
>    thirdRowLayout->addWidget(m_toleranceSlider);
>    thirdRowLayout->addWidget(m_toleranceLineEdit);
>    thirdRowLayout->addWidget(m_toleranceCheckBox);
>    thirdRowLayout->addWidget(m_saveToleranceButton);
>    thirdRowLayout->addWidget(m_cancelToleranceButton);
>
>    // Layout the auto/manual and single-shot buttons.
>    QHBoxLayout *fourthRowLayout = new QHBoxLayout;
>    fourthRowLayout->addStretch();
>    fourthRowLayout->addWidget(m_autoManualComboBox);
>    fourthRowLayout->addWidget(m_singleShotButton);
>    fourthRowLayout->addWidget(m_continuousButton);
>
>    // Do Top layout.
>    QVBoxLayout *topLayout = new QVBoxLayout;
>    topLayout->addLayout(firstRowLayout);
>    topLayout->addLayout(secondRowLayout);
>    topLayout->addLayout(thirdRowLayout);
>    topLayout->addLayout(fourthRowLayout);
>
>    QWidget *dummy = new QWidget();
>    dummy->setLayout(topLayout);
>    setCentralWidget(dummy);
> }
>
>
>
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest
>
>
>
>
>
> _______________________________________________
> Qt-interest mailing list
> Qt-interest at trolltech.com
> http://lists.trolltech.com/mailman/listinfo/qt-interest


-- 
Christian Gagneraud,
Electronics and software engineer

TechWorks Marine Ltd
4a, Park Lane
Dun Laoghaire, Co Dublin
Ireland

Tel: + 353 1 2365990
Fax: + 353 1 2365992
Web: www.techworks.ie





More information about the Qt-interest-old mailing list