【问题标题】:Qt couting checked buttons made dynamicallyQt couting 检查按钮动态制作
【发布时间】:2015-01-24 10:22:35
【问题描述】:

我正在尝试计算已检查的按钮数量

    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();
            QPushButton *button[wiersze.toInt()][kolumny.toInt()];

            QGridLayout *controlsLayout = new QGridLayout;
            for(int i=0;i<wiersze.toInt();i++)
            {
                for(int j=0;j<kolumny.toInt();j++)
                {
                        licz = QString::number(licznik);
                        licznik++;
                        button[i][j] = new QPushButton(licz);
                        button[i][j]->setCheckable(1);
                        controlsLayout->addWidget(button[i][j], i, j);
                }
            }

            QPushButton *okej = new QPushButton("Zatwierdź");
            QPushButton *anul = new QPushButton("Anuluj");

            controlsLayout->addWidget(okej, wiersze.toInt(), 0);
            controlsLayout->addWidget(anul, wiersze.toInt(), 1);

            controlsLayout->setHorizontalSpacing(0);
            controlsLayout->setVerticalSpacing(0);
            centralWidget->setLayout(controlsLayout);

            setCentralWidget(centralWidget);



            for(int i=0;i<wiersze.toInt();i++)
            {
                for(int j=0;j<kolumny.toInt();j++)
                {
                        connect(button[i][j],SIGNAL(toggled(bool)),this,SLOT(tescik()));
                }
            }
            connect(anul,SIGNAL(clicked()),this,SLOT(close()));

            connect(okej,SIGNAL(clicked()),this,SLOT(okay2()));


}





    void pracownik2::tescik()
{

miejsca++;

}

    void pracownik2::okay2()
{

    QString m=QString::number(miejsca);
    QMessageBox::information(this,"elo","wybranych miejsc: " + m);
}

如果我选中按钮 1、2、3 并按下确定按钮,则显示 3 个按钮已被选中,但如果我选中按钮 1 并取消选中它并按下确定,则表明已选中 2 个按钮。仅当我选中按钮而不是取消选中它时,如何使我的变量增加? 我很抱歉代码编辑,只是不能让它看起来更好

【问题讨论】:

  • 也许,但我不知道把这个“if”语句放在哪里
  • 您的代码中现在有“增加计数”。将其替换为“如果选中按钮,则增加计数,否则减少计数”。或者你需要发生的任何事情。
  • 但是有一个增加的功能,我不能把 if(button->isChecked()==true) 放在那里,因为按钮是动态制作的
  • QPushButtonQAbstractButton 继承此信号:doc.qt.io/qt-5/qabstractbutton.html#clicked
  • 我尝试了不同的SIGNALS,我的意思是clicked()、pressed()、released(),但没有成功

标签: c++ arrays qt dynamic qpushbutton


【解决方案1】:

信号toggled 有一个布尔参数,将其添加到您的槽中,并根据它调整计数。更改连接:

connect(button[i][j],SIGNAL(toggled(bool)),this,SLOT(tescik(bool)));

然后换槽:

void pracownik2::tescik(bool t) {
    if (t) miejsca++;
    else miejsca--;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-27
    • 2019-09-27
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多