[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