2016-04-23 17 views
0

違いは何ですか?ボタンをチェックしたり、押したりするコードがあります。同じボタンでこれらのことを別々に行っても、私は違いに気づいていません。視覚効果は同じです(ウィンドウが青色になり、マウスがクリックされていない場合はこのままです)。isDown()isChecked()の違い

また、私はボタンのチェックに関して別の質問があります。 1つのボタンがあり、現時点ではグループ1にはない(コメントアウトされています)、SLOTに接続されています。同じウィンドウ内にテキストエリアがあるので、ボタンを押すと "checked"の名前が変わり、青色に変わります。だから私が何かを入力するためにカーソルをテキスト領域に置くと、それはまだ青色でチェックされています。しかし、もう一度クリックすると「未チェック」になりますが、まだ青です。しかし、それをやった後にもう一度テキスト領域に何かを入力すれば、ボタンは白で、下ではなく「未チェック」です。

これで、コード内でsetChecked(true/false)を使用しなくても、ボタンの状態をクリックするだけでボタンの状態を変更できます。

しかし、別のことが来ます。コード内でgroup1で2行のコメントを外し、grouにbutton1を追加すると、突然マウスをクリックしてボタンをチェックする/選択解除する機能が失われます。それは常に "チェックされた"ままであり、私はそれを変更する唯一の方法はコード経由であると思います。なぜこれが起こるのですか?次のように

Window5::Window5(QWidget * parent) :QWidget(parent) 
    { 
    QPushButton * button1=new QPushButton("button1",this); 
    connect(button1, SIGNAL(clicked()), this, SLOT(make_pushed())); 

    //QButtonGroup * group1=new QButtonGroup(); //currently not in the group 
    // group1->addButton(button1); 

    QLineEdit * line_area=new QLineEdit(this); 
    line_area->setGeometry(500,500,70,20); 
    button1->setCheckable(true); 
    } 

void Window5::make_pushed() 
    { 


QObject* sender = QObject::sender(); 
QPushButton* button = qobject_cast<QPushButton*>(sender); 
button->setDown(true); 

if (button->isChecked()) 
{ 
    button->setText("checked"); 
} 
else 
{ 
    button->setText("unchecked"); 
} 

}

答えて

2

isDown()とにisChecked(差)です。ユーザがボタンをクリックしてチェックすると、ボタンが最初に押され、チェックされた状態に解放されます。

ユーザーがもう一度クリックすると(チェックを外す)、ボタンは最初に押された状態に移行し、次にチェックされていない状態になります(isChecked()とisDown()は両方ともfalseです)。

詳細はofficial Qt documentation of QAbstractButtonです。

+0

ボタンがチェックされているときに、それがチェックされていないときだけでなく、ダウンでもないという意味ですか? – parsecer

+1

違いはごくわずかです。ユーザーがボタンをクリックしてチェックすると、releaseイベントが発生するとisCheckedがtrueになり、releaseイベントが発生する前にisDownがtrueになると、pressイベントが発生します。ユーザーが再度クリックすると、isCheckedとisDownが同時にtrueになります。 –

関連する問題