2017-01-28 9 views
0

Это for петля позиционирования кода и дает размеры до 22 кнопок:сделать изменения в течение кнопки отправить QSignalMapper в Qt

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); 
     } 

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

enter image description here

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

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

+0

почему вы не [ 'setStyleSheet()'] (https://doc.qt.io/qt-5/qwidget.html#styleSheet-prop)/['setPalette()'] (https://doc.qt.io/qt-5/qwidget.html#palette-prop) на кнопке, прежде чем добавлять его в макет? Возможно, есть еще один массив для стилей/палитр и использовать его в вашем цикле вместе с массивом 'text'. – Mike

ответ

0

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

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

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

0

Вы можете создать 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.