Для того, чтобы поймать реакцию на нажатие кнопки надо использовать сигналы и слоты? Можно маленький примерчик.
ПыСы Простите за такие глупые вопросы, просто что-то не получается поймать реакцию на нажатие кнопки OK, Cancel, для выхода из второстепенного диалогового окна в главное приложение!
Угу, сигналы и слоты.
Вот пример: http://crossplatform.ru/documentation/qtdoc4.3/tutorial-t2.php
Вопрос посложнее: есть файл, из которого считываются нужные цвета кнопок. Затем заполняется в цикле массив кнопок. Как мне узнать на какую кнопку нажали? С помощью какого сигнала или слота это определить?
Заполнение:
void QDialDistParam::setupDialog(QWidget* dialog)
{
for(int i = tab_mas[tab_index].index + 1; i<dist_vec -> size(); ++i)
{
string type = (*dist_vec)[i].getType().toStdString();
if(type != "Tab")
{
string param_name_str = (*dist_vec)[i].getPrName().toStdString();
QString param_name = (*dist_vec)[i].getPrName();
if(type == "CheckBox")
{
//
}
else if(type == "PushButton")
{
param_name.insert(0, btn_inset);
params[param_index].btnColor = new QPushButton(dist_tabs[k]);
params[param_index].btnColor -> setObjectName(param_name);
params[param_index].btnColor -> setGeometry(btn_x, y, btn_width, btn_height);
QString style_sheet = "* { background-color: ";
style_sheet += (*dist_vec)[i].getColor();
style_sheet += " }";
params[param_index].btnColor -> setStyleSheet(style_sheet);
connect(params[param_index].btnColor, SIGNAL(pressed()),
this, SLOT(btnColorClick())); //// жирным выделен важный кусок кода, на который и следует обратить внимание
++param_index;
param_count = param_index;
y += 30;
}
}
else break;
}
distGraphics -> addTab(dist_tabs[k], QString());
}
void QDialDistParam::btnColorClick()
{
QColor color = QColorDialog::getColor();
QString color_name = color.name();
for(int k=0; k<param_count; ++k)
if(btnSave -> isChecked()) /// ????????????????
{
QString style_sheet = "* { background-color: ";
style_sheet += color_name;
style_sheet += " }";
params[k].btnColor ->setStyleSheet(style_sheet);
break;
}
}
глянь пример http://crossplatform.ru/documentation/qtdoc4.3/mainwindows-mdi.php, там, используется QSignalMapper, т.к. сигналы triggered() передают толко булевые значения, а впрограмме требуется узнать виджет.
тут у Шлее нашел еще, в его MDI, такой слот:
void MDIProgram::slotChangeWindowTitle(const QString& str)
{
qobject_cast<DocWindow*>(sender())->setWindowTitle(str);
}
хе-хе, смотри пример Калкулятор, там слот один несколько кнопок обслуживает.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)