#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.