Внесите изменения в кнопки, отправленные в QSignalMapper в Qt

#c #qt #qt-creator

Вопрос:

Это for цикл позиционирования кода и придания размеров 22 кнопкам:

 for(int i=0; i<texts.size();   i)
      {
         QPushButton* button = new QPushButton(texts[i]);

        connect(button, SIGNAL(clicked(bool)),
                signalMapper, SLOT(map()));
         button -> setFixedSize(50,30);

        signalMapper -> setMapping(button, texts[i]);
         gridLayout -> addWidget(button, i/5, i%5);
      }
 

Изображение вывода выглядит следующим образом:

введите описание изображения здесь

Я хочу манипулировать size , position , color и font каждой кнопкой «вручную». Я думаю, что мне нужно как-то забрать кнопки, signalMapper чтобы я мог выполнять на них эти работы. Ты согласен?
Пожалуйста, какой самый простой и прямой способ выполнить эти работы?

PS: Я написал приложение только в коде C и не использовал конструктор.

Комментарии:

1. почему бы вам setStyleSheet() setPalette() не нажать на кнопку, прежде чем добавлять ее в макет? Возможно, у вас есть другой массив для таблиц стилей/палитр, и вы можете использовать его в своем цикле вместе с texts массивом.

Ответ №1:

Вы можете получить каждую кнопку с помощью функции сопоставления:

 QPushButton* button = static_cast<QPushButton*>(this->siganlMapper.mapping("1"));
button->setStyleSheet("color: red");
 

Это изменит цвет текста кнопки с номером 1 на красный

Ответ №2:

Вы можете создать a QList<QPuchButton> для динамического хранения всех ваших кнопок. Делайте это, пока они создаются. Это приведет к чему-то вроде этого:

 QList<QPushButton*> calcButtons;//QList for storing the buttons
    for(int i=0; i<texts.size();   i)
    {
        QPushButton* button = new QPushButton(texts[i]);
        calcButtons << button;
        connect(button, SIGNAL(clicked(bool)),
                signalMapper, SLOT(map()));
        button -> setFixedSize(50,30);

        signalMapper -> setMapping(button, texts[i]);
        gridLayout -> addWidget(button, i/5, i%5);
    }

    calcButtons[0];//Use this to access them later. '0' being the first button added.