Почему сигнал для QCheckBox не излучается? - PullRequest
1 голос
/ 15 июня 2011

Я пытаюсь вставить в свой интерфейс флажок, который может установить логическую переменную из другого класса true или false в соответствии с его проверенным состоянием.Проблема в том, что сигнал не излучается.

Переменная определена в заголовочном файле моего 1-го класса (renderarea.h) как

public:
bool selectionMode;

Слот определен в заголовочном файле 2-го класса как void

protected slots:
void setSelectionMode(bool mode);

И сигнал подключен к слоту в моем исходном файле второго класса в конструкторе как:

PaintWidget::PaintWidget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::PaintWidget)
{
connect(ui->selectionModeCheckBox, SIGNAL(toggled(bool)), this, SLOT(setSelectionMode(bool)));
}
void PaintWidget::setSelectionMode(bool mode)
{
    ui->displayWidget->selectionMode = mode;

    QMessageBox msgbox;
    if (ui->displayWidget->selectionMode == true)
        msgbox.setText("selection mode is true");
    else
        msgbox.setText("selection mode is false");
}

Я использую QMessageBox здесь только для целей тестирования.Но при отладке я увидел, что сигнал не излучается.Что я делаю не так?

Ответы [ 4 ]

3 голосов
/ 15 июня 2011

Вы хотите убедиться, что ряд вещей на месте:

  1. setupUi
  2. connect успешно
  3. значение флажка действительно изменено

Во-первых, я не вижу, куда вы звонили setupUi. Вы захотите сделать это в конструкторе:

PaintWidget::PaintWidget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::PaintWidget)
{
    ui->setupUi(this);
    connect(ui->selectionModeCheckBox,
        SIGNAL(toggled(bool)), this, SLOT(setSelectionMode(bool)));
}

Во-вторых, убедитесь, что возвращаемое значение connect указывает на успешное выполнение.

В-третьих, я предполагаю, что вы вручную устанавливаете флажок, но для тестирования вы можете сделать это после подключения в конструкторе:

ui->selectionModeCheckBox->setChecked(true);
0 голосов
/ 24 июля 2015

хорошо, я часто использую флажок в диалоге (settingDialog, selectionDialog и т. Д.), Поэтому в этом случае сигнал-слот не нужен, просто проверьте состояние флажка при нажатии кнопки «ОК» и разберитесь с ним в вашей функции принятия. В вашей ситуации я не считаю флажок хорошим выбором.

0 голосов
/ 15 июня 2011

Вы должны использовать сигнал stateChanged () , который выводится флажком при изменении его состояния. Он дает вам целое число, потому что флажки также могут быть в трех состояниях (но вы можете просто использовать это значение int в качестве логического значения, в вашем случае).

0 голосов
/ 15 июня 2011

Просто чтобы уточнить, когда вы говорите, что слот находится в заголовочном файле, вы имеете в виду после слотов: метка, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...