Название: Перетасовка объектов на форме Отправлено: jonyroww от Май 28, 2014, 18:44 Здравствуйте!
Пишу систему тестирования в Qt. Нужно, чтобы чекбоксы при запуске меняли положение. Как это сделать? #include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setupUi(this); checkBox->hide(); checkBox_2->hide(); checkBox_3->hide(); plainTextEdit->hide(); label->hide(); label_2->hide(); pushButton_2->hide(); ans = ""; cnt = 0; f.open("in.txt"); right = 0; } void MainWindow::on_pushButton_clicked() { pushButton->hide(); checkBox->show(); checkBox_2->show(); checkBox_3->show(); plainTextEdit->show(); std::getline(f, ans); plainTextEdit->setPlainText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox_2->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox_3->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); } void MainWindow::on_checkBox_clicked() { cnt ++; if(cnt > 9) { label_2->setText(QString::number(right)); label->show(); label_2->show(); pushButton_2->show(); checkBox->hide(); checkBox_2->hide(); checkBox_3->hide(); plainTextEdit->hide(); return; } if(QString::fromLocal8Bit(ans.c_str()) == checkBox->text()) right ++; std::getline(f, ans); plainTextEdit->setPlainText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox_2->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox_3->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox->setChecked(false); } void MainWindow::on_checkBox_2_clicked() { cnt ++; if(cnt > 9) { label_2->setText(QString::number(right)); label->show(); label_2->show(); pushButton_2->show(); checkBox->hide(); checkBox_2->hide(); checkBox_3->hide(); plainTextEdit->hide(); return; } if(QString::fromLocal8Bit(ans.c_str()) == checkBox_2->text()) right ++; std::getline(f, ans); plainTextEdit->setPlainText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox_2->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox_3->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox_2->setChecked(false); } void MainWindow::on_checkBox_3_clicked() { cnt ++; if(cnt > 9) { label_2->setText(QString::number(right)); label->show(); label_2->show(); pushButton_2->show(); checkBox->hide(); checkBox_2->hide(); checkBox_3->hide(); plainTextEdit->hide(); return; } if(QString::fromLocal8Bit(ans.c_str()) == checkBox_3->text()) right ++; std::getline(f, ans); plainTextEdit->setPlainText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox_2->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox_3->setText(QString::fromLocal8Bit(ans.c_str())); std::getline(f, ans); checkBox_3->setChecked(false); } void MainWindow::on_pushButton_2_clicked() { close(); } Название: Re: Перетасовка объектов на форме Отправлено: kambala от Май 28, 2014, 21:40 какое положение? через setChecked() что ли?
Название: Re: Перетасовка объектов на форме Отправлено: jonyroww от Май 28, 2014, 22:16 какое положение? через setChecked() что ли? Положение на форме. В чекбоксы выводятся варианты ответов из текстового файла, то есть они должны каждый раз перемешиваться.Название: Re: Перетасовка объектов на форме Отправлено: Kurles от Май 28, 2014, 23:46 Читай из файла значения, но не сразу их выводи в чекбоксы, а в std::list например, затем значения этого контейнера перемешай с помощью того же std::shuffle или своей реализацией алгоритма, и уже из перемешенного списка задавай описания чекбоксам. Вроде довольно прямолинейный алгоритм :)
Название: Re: Перетасовка объектов на форме Отправлено: jonyroww от Май 29, 2014, 08:09 Читай из файла значения, но не сразу их выводи в чекбоксы, а в std::list например, затем значения этого контейнера перемешай с помощью того же std::shuffle или своей реализацией алгоритма, и уже из перемешенного списка задавай описания чекбоксам. Вроде довольно прямолинейный алгоритм :) Если не трудно, можете привести пример из моего кода?)) Название: Re: Перетасовка объектов на форме Отправлено: Kurles от Май 29, 2014, 10:39 Читай из файла значения, но не сразу их выводи в чекбоксы, а в std::list например, затем значения этого контейнера перемешай с помощью того же std::shuffle или своей реализацией алгоритма, и уже из перемешенного списка задавай описания чекбоксам. Вроде довольно прямолинейный алгоритм :) Если не трудно, можете привести пример из моего кода?)) |