2017-01-17 10 views
0

qtcreatorでqt5.7のGUIを開発しています。私は、同じ番号を表すチェックボックスとコンボボックスを含むウィジェットを作った。私は、コンボボックス内の新しいインデックスを設定するために信号toggled()を使用します。次に、currentIndexChanged()シグナルで同じことをして、チェックボックスの新しい状態を設定します。これは正常に動作します。qt複数のカスタムウィジェットのインスタンスがスロットをエスケープできない

私のカスタムウィジェットのインスタンスを4つ使用すると、私の問題が始まります。インスタンス[0]のコンボボックスの新しい値を選択すると、そのチェックボックスが変更されず、代わりにインスタンス3の値が変更されます。

私はカスタムウィジェットでconnect文を使用するコードの部分です。

QCheckBox* tri_st[NUM_TRIST_BUFF]; 

Qt_adc_delay::Qt_adc_delay(QWidget *parent) : 
QWidget(parent), 
ui (new Ui::Qt_adc_delay) 
{ 
ui->setupUi(this); 
int i = 0;   
... 
Assign the checkboxes in widget to tri_st[] 
... 
for(i=0;i<NUM_TRIST_BUFF;i++) 
    connect(tri_st[i],SIGNAL(toggled(bool)),this,SLOT(tri_state_checks_Changed(void))); 

トップウィジェットでdisconnect()とconnect()をもう一度使ってみましょう。簡単な方法がありますか?

PD:ここではあなたがUi_Widgetを変更しないでください(UIC、qtcreatorのために生成される)私のui_widget.hの一部

class Ui_Widget 
{ 
public: 
Qt_adc_delay *widget; 
Qt_adc_delay *widget_2; 

void setupUi(QWidget *Widget) 
{ 
    if (Widget->objectName().isEmpty()) 
     Widget->setObjectName(QStringLiteral("Widget")); 
    Widget->resize(500, 400); 
    widget = new Qt_adc_delay(Widget); 
    widget->setObjectName(QStringLiteral("widget")); 
    widget->setGeometry(QRect(10, 10, 205, 400)); 
    widget_2 = new Qt_adc_delay(Widget); 
    widget_2->setObjectName(QStringLiteral("widget_2")); 
    widget_2->setGeometry(QRect(220, 10, 205, 400)); 

    retranslateUi(Widget); 

    QMetaObject::connectSlotsByName(Widget); 
} // setupUi 
+0

"tri_st"に値を割り当てるコードはありません。それは放置されたコードですか?コメントはありますが、実際のコードはありません。重要である可能性があります。 – goug

答えて

0

あり、それが上書きされます生成されたファイルです。デザイナーベースのウィジェットをカスタマイズするためのさまざまなテクニックについては、Using a Designer UI File in Your Applicationを参照してください。

次に、ポインタの静的配列であるtri_stは、それを静的にするのはなぜですか?接続ステートメントの単純なループを作成する場合は、コンボボックスを作成している間にQVector<QComboBox*>を作成し、それを接続ループに使用してください。

関連する問題