QT brak możliwości pobrania wartości. Błąd z layoutami?

0

Chodzi o to że dopóki kiedy nie dodałem radiobuttons wszystko było ok..
chyba..
a teraz wywołanie linijki std::cout << doubleSpinbox wyświetla 000000 zamiast odwołania do adresu.
Przed dodaniem radiobuttons poniższa linijka
doubleSpinbox->value(); poprawnie zwracała wartość double.. teraz jej wywowałenie poowduje błąd.

#include "QTwidgets.h"
#include <OknoGL.h>
#include <QtWidgets\qpushbutton.h>
#include <QtWidgets\qlabel> //do usuniecia
#include <QtWidgets\qinputdialog.h>
#include <QtWidgets\qdirmodel.h> //do wywalenia
#include <QtWidgets\qslider.h>
#include <QtWidgets\qspinbox.h>
#include <QtWidgets\qgroupbox.h>
#include <QtWidgets\qradiobutton.h>

QLabel* label;
QSlider* slider;
QDoubleSpinBox* doubleSpinbox;
QRadioButton* radio1;
QRadioButton* radio2;

QTwidgets::QTwidgets()
{
	QVBoxLayout* mainLayout;
	setLayout(mainLayout = new QVBoxLayout);
	QVBoxLayout* controlsLayout;
	mainLayout->addLayout(controlsLayout = new QVBoxLayout);
	mainLayout->addWidget(new OknoGL);
	
	label = new QLabel(this);
	label->setText("Manipulacja wektorami");
	controlsLayout->addWidget(label);
	
	slider = new QSlider();
	controlsLayout->addWidget(slider);
	slider->setOrientation(Qt::Horizontal);
	slider->setRange(0, 100);
	slider->setValue(0);
	slider->setGeometry(10, 40, 180, 30);
/*#########33Powodujace błąd#######3 */
	QDoubleSpinBox* doubleSpinbox = new QDoubleSpinBox();
	controlsLayout->addWidget(doubleSpinbox);
	connect(doubleSpinbox, SIGNAL(valueChanged(double)), this, SLOT(pressed()));

	QGridLayout* gridRadioButtons;
	controlsLayout->addLayout(gridRadioButtons = new QGridLayout);
	QGroupBox* radioButtonsGroup = new QGroupBox(tr("Radio Buttons"));
	radio1 = new QRadioButton(tr("Radio button 1"));
	radio2 = new QRadioButton(tr("Radio button 2"));
	radio1->setChecked(true);
	gridRadioButtons->addWidget(radio1);
	gridRadioButtons->addWidget(radio2);
/*########################3*/
	
	QPushButton* myButton;
	myButton = new QPushButton(this);
	//myButton->setGeometry(0, 0, 100, 35);
	myButton->setFixedSize(100, 35);
	myButton->setText("Wylacz");
	//connect(myButton, SIGNAL(clicked()), this, SLOT(pressed()));
	controlsLayout->addWidget(myButton);
	
}

void QTwidgets::pressed()
{
	//std::cout << "Dobranoc :)\n";
	//exit(1);
	//if (radio2->isChecked())
	//{
	//	std::cout << "yes\n";
	//}
	std::cout << doubleSpinbox;
	std::cout << std::endl;
	std::cout << "";
}

void QTwidgets::test()
{
	std::cout << "yeep\n";
}

1

Zmienne globalne i przesłanianie nazw cię ugryzły. Po co tutaj w ogóle zmienne globalne?!

QDoubleSpinBox* doubleSpinbox = new QDoubleSpinBox();

definiujesz nową, lokalną dla konstruktora zmienną

void QTwidgets::pressed()
{
    std::cout << doubleSpinbox;

używasz globalnej

0

Aha... dobra rozumiem...
mam też drugie pytanie..
mam dość duży problem bo po włączneniu programu mogę się poruszać po scenie..
ale gdy nacisnę na jedną z elementów contrlsLayout to poniżej podane funkcjie sterowania nie działają.. jak można to naprawić?

void OknoGL::keyPressEvent(QKeyEvent* e)
{
	switch (e->key())
	{
		case Qt::Key::Key_W:
			camera.moveForward();
			break;
		case Qt::Key::Key_S:
			camera.moveBackward();
			break;
0

Bo focus przechodzi ci na innego widgeta i zdarzenia klawiatury idą do widget-a, który akurat ma focus.
Najlepiej stwórz event filter i zainstaluj go na QApplication wtedy zawsze będziesz dostawał zdarzenia klawiatury (uwaga łatwo coś popsuć).

1 użytkowników online, w tym zalogowanych: 0, gości: 1