我想增强我的代码,但我没有这样做,我的问题是如何正确传递参数,我的意思是:
void pracownik2::on_pushButton_4_clicked(){
this->setWindowTitle("EKRAN");
QWidget *centralWidget = new QWidget;
int licznik=1;
QString licz;
//QString kolumny = ui->lineEdit->text();
//QString wiersze = ui->lineEdit_2->text();
miejsca2 = ui->lineEdit_3->text().toInt();
//QPushButton *button[wiersze.toInt()][kolumny.toInt()];
QPushButton *button[3][6];
QGridLayout *controlsLayout = new QGridLayout;
for(int i=0;i<3;i++)
{
for(int j=0;j<6;j++)
{
licz = QString::number(licznik);
licznik++;
button[i][j] = new QPushButton(licz);
button[i][j]->setCheckable(1);
if(tab[i][j]==1)
button[i][j]->setEnabled(false);
controlsLayout->addWidget(button[i][j], i, j);
}
}
QPushButton *okej = new QPushButton("Zatwierdź");
QPushButton *anul = new QPushButton("Anuluj");
controlsLayout->addWidget(okej, 3, 0);
controlsLayout->addWidget(anul, 3, 1);
controlsLayout->setHorizontalSpacing(0);
controlsLayout->setVerticalSpacing(0);
centralWidget->setLayout(controlsLayout);
setCentralWidget(centralWidget);
for(int i=0;i<3;i++)
{
for(int j=0;j<6;j++)
{
connect(button[i][j],SIGNAL(toggled(bool)),this,SLOT(tescik(bool)));
}
}
connect(anul,SIGNAL(clicked()),this,SLOT(close()));
connect(okej,SIGNAL(clicked()),this,SLOT(okay2()));}
void pracownik2::tescik(bool t){
if (t)
{
miejsca++;
}
else
{
miejsca--;
}}
到目前为止这是有效的,我想要&#39; tescik&#39;函数也用于设置我的数组的值:
void pracownik2::tescik(bool t, int i, int j){
if (t)
{tab[i][j]=1;
miejsca++;
}
else
{tab[i][j]=0;
miejsca--;
}}
我无法通过&#39;我&#39;和&#39; j&#39;当前qpushbutton的索引,我不知道如何编辑我的连接线
connect(button[i][j],SIGNAL(toggled(bool)),this,SLOT(tescik(bool,int,int)));
它仍然不知道int,int我的意思是什么,我仍然不知道如何让它工作:)
答案 0 :(得分:1)
你的问题是因为在尝试连接信号和插槽时参数不匹配(信号只发出一个bool
值,当插槽需要三个时) - 你应该在你的应用程序输出中收到相应的消息。其中一个解决方案是使用QObject动态属性。创建按钮时可以执行以下操作:
button[i][j] = new QPushButton(licz);
button[i][j]->setProperty("i", i);
button[i][j]->setProperty("j", j);
然后你可以改写你的插槽:
void pracownik2::tescik(bool t) {
int i = QObject::sender()->property("i").toInt();
int j = QObject::sender()->property("j").toInt();
if (t)
{tab[i][j]=1;
miejsca++;
}
else
{tab[i][j]=0;
miejsca--;
}}