2016-01-23 8 views
5

W moim programie Qt chcę wykryć sygnał jednego z moich pól wyboru, aby sprawdzić, czy jest on sprawdzony, czy nie. Zrobiłem to:Qt Łapanie sygnału z pola wyboru do wykonania czynności

#include <iostream> 
#include <QVBoxLayout> 
#include <QtGui> 
#include "Window.h" 

Window::Window() : QWidget() 
{ 
    setFixedSize(400, 800); 

    m_bouton = new QPushButton("Module 1"); 
    m_bouton->setCursor(Qt::PointingHandCursor); 

    m_bouton2 = new QPushButton("Module 2"); 
    m_bouton2->setCursor(Qt::PointingHandCursor); 

    m_bouton3 = new QPushButton("Module 3"); 
    m_bouton3->setCursor(Qt::PointingHandCursor); 

    m_bouton4 = new QPushButton("Module 4"); 
    m_bouton4->setCursor(Qt::PointingHandCursor); 

    m_check4 = new QCheckBox(this); 
    m_check4->move(300, 50); 
    m_check4->setChecked(true); 

    m_check3 = new QCheckBox(this); 
    m_check3->move(200, 50); 
    m_check3->setChecked(true); 

    m_check2 = new QCheckBox(this); 
    m_check2->move(100, 50); 
    m_check2->setChecked(true); 

    m_check1 = new QCheckBox(this); 
    m_check1->move(0, 50); 
    m_check1->setChecked(true); 

    QVBoxLayout *layout = new QVBoxLayout; 
    layout->addWidget(m_bouton); 
    layout->addWidget(m_bouton2); 
    layout->addWidget(m_bouton3); 
    layout->addWidget(m_bouton4); 
    this->setLayout(layout); 
    this->setStyleSheet("border: 1px solid black; border-radius: 10px;"); 

    this->setWindowOpacity(0.5); 
    QWidget::setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint); 
    QWidget::setWindowTitle("Monitor Core"); 
    QObject::connect(m_bouton4, SIGNAL(clicked()), this, SLOT(SizeCHange())); 
    QObject::connect(m_check4, SIGNAL(clicked()), this, SLOT(SizeCHange())); 
} 

void Window::SizeCHange() 
{ 
    setFixedSize(400, 800 - 200); 
    m_bouton4->setVisible(false); 
} 

a to mój .h:

#ifndef _WINDOW_H_ 
#define _WINDOW_H_ 

#include <QApplication> 
#include <QWidget> 
#include <QPushButton> 
#include <QCheckBox> 

class Window : public QWidget 
{ 
    Q_OBJECT 

public: 
    Window(); 

    public slots: 
    void SizeCHange(); 

private: 
    QPushButton *m_bouton; 
    QPushButton *m_bouton2; 
    QPushButton *m_bouton3; 
    QPushButton *m_bouton4; 
    QCheckBox *m_check1; 
    QCheckBox *m_check2; 
    QCheckBox *m_check3; 
    QCheckBox *m_check4; 
}; 

#endif 

To działa, ale tylko jeden raz. Chcę wiedzieć, czy to jest czek, czy nie, wtedy będę mógł zmienić rozmiar okna i zrobić coś niewidzialnego, jak chcę.

+0

dziwne zachowanie. Ten kod działa dobrze dla mnie. Czy możesz podać większy kawałek kodu? W jaki sposób zdefiniowano m_check4 i m_bouton4? –

+0

Pierwszy wpis edytowany – Michael003

+0

Ten kod działa dobrze dla mnie. Czy wykonałeś ** przebudowę ** swojego projektu? Z jakich wersji IDE, OS i Qt korzystasz? –

Odpowiedz

1

Wystarczy użyć parametru bool, który wskazuje stan pola wyboru:

public slots: 
    void SizeCHange(bool checked); //using bool parameter 

//... 
QObject::connect(m_check4, SIGNAL(clicked(bool)), this, SLOT(SizeCHange(bool))); 
//... 
void Window::SizeCHange(bool checked) 
{ 
    if(checked) 
    { 
     setFixedSize(400, 800 - 200); 
    } 
    else 
    { 
     // removing fixed size 
     setMinimumSize(QSize(0, 0)); 
     setMaximumSize(QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)); 
    } 
    m_bouton4->setVisible(checked); 
} 

The docs for a signal clicked()

+0

To jest pomysł, jest tylko mały problem, za pierwszym razem, gdy usuniesz zaznaczenie, nie zmienia rozmiaru okna jako (400, 800 - 200). A kiedy to sprawdzimy, powinien pojawić się m_button4 i ustawić rozmiar jak przedtem – Michael003