2017-01-17 14 views
0

Я разрабатываю gui в qt5.7 с qtcreator. Я сделал виджет, который содержит флажки и комбинированные поля для представления того же числа. Я использую сигнал toggled(), чтобы установить новый индекс в поле со списком. Затем я делаю то же самое с сигналом currentIndexChanged(), чтобы установить новые состояния для флажков. Это прекрасно работает.qt несколько экземпляров пользовательского виджета не могут вырезать свои слоты

Проблема возникает, когда я использую 4 экземпляра моего пользовательского виджета. Когда я выбираю новое значение для combobox в экземпляре [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))); 

Постараюсь использовать разъединение() и подключения() еще раз в моем верхнем виджете, чтобы заставить его работать, но. Есть простой способ сделать это?

П.Д.: Вот часть моего ui_widget.h (генерируется для МСЖД, QtCreator)

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

Вы не должны изменять Ui_Widget, это сгенерированный файл, который будет перезаписан. Взгляните на Using a Designer UI File in Your Application для описания различных методов, которые вы можете использовать для настройки виджета, основанного на дизайне.

Тогда tri_st Это статический массив указателя, зачем он статичен? Если это делается для создания простого цикла для оператора connect, тогда просто создайте QVector<QComboBox*> при создании своих списков, а затем используйте это для цикла соединения.