1

ここには 2 つの異なるレイアウトと 1 つの QToolButton があります。私の目標は、クリックしたときにそのボタンを 2 つのレイアウト間で転送することです。私はこのコードがうまくいくと思った、

スニペット:

void DominionLinux::on_toolButton_clicked(string state)
{
    if (state=="Disabled"){
        ui->verticalLayout_Enabled->addWidget(ui->toolButton);
        state = "Enabled";
    }
    else if (state=="Enabled"){
        ui->verticalLayout_Disabled->addWidget(ui->toolButton);
        state = "Disabled";
    }
}

デフォルトでは、状態 == "無効" です。QTCreator で UI をテストすると、最初にクリックしたときに動作します。ボタンは 1 つのテンプレートから消え、別のテンプレートに表示されます。他のテンプレート上で 2 回目にクリックすると、クリックしません。コンパイルすると、次の警告が表示されます: *QMetaObject::connectSlotsByName: on_toolButton_clicked(string) の一致する信号がありません*

スロットが機能しなくなる理由はありますか?

4

1 に答える 1

2

スロットが機能しなくなる理由はありますか?

警告も示唆しているため、接続の場所にシグナル宣言がありません。また、スロットをシグナルとして connect メソッドに渡しているようです。シグナルは、Qt アプリケーションのスロットと同じ名前であってはなりません。

それ以外に、ボタンの無効化と有効化に関するデザインを再考したい場合があります。それらを別々のレイヤーに入れることは、適切な方法ではありません。

さらに、一般的に状態を表すために生の文字列を避ける必要があります。「トグル状態」には列挙型またはブール値を使用することをお勧めします。

于 2013-09-07T08:58:34.427 に答える