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

Odpowiedz Nowy wątek
2019-01-16 19:13

Rejestracja: 3 lata temu

Ostatnio: 3 miesiące temu

0

Chodzi o to że dopóki kiedy nie dodałem radiobuttons wszystko było ok..
chyba..
a teraz wywołanie linijki std::cout << doubleSpinboxwyś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";
}

Pozostało 580 znaków

kq
2019-01-16 19:17
kq
Moderator C/C++

Rejestracja: 6 lat temu

Ostatnio: 6 minut temu

Lokalizacja: Szczecin

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


Pozostało 580 znaków

2019-01-16 19:23

Rejestracja: 3 lata temu

Ostatnio: 3 miesiące temu

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;
edytowany 1x, ostatnio: bartek164, 2019-01-16 19:25

Pozostało 580 znaków

2019-01-17 11:18

Rejestracja: 12 lat temu

Ostatnio: 2 minuty temu

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ć).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

Odpowiedz

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