我是第四周学习C ++的初学者;我一直在研究CodeBlocks,但由于我对制作GUI的兴趣,我转而使用Qt Creator。回到CodeBlocks我创建了一个函数,可以避免下面代码中的所有重复,只更改“TXT FILE”。但是,使用Qt Creator的“专用”C ++,我无法理解如何创建一个函数来避免所有这些重复。
有什么想法吗? (我在这个Qt项目中走得太远,无法回到CodeBlocks。)
“TXT FILE”根据用户选择的RadioButton
而变化。
void MovierRec::on_searchButton_clicked()
{
int randomValue = qrand() % 100;
QList<QString> titles;
if(ui->modernButton->isChecked())
{
QFile myfile(":/classics.txt");
if (myfile.open(QIODevice::ReadOnly))
{
QTextStream in(&myfile);
while (!in.atEnd())
{
QString line = in.readLine();
titles.append(line);
}
myfile.close();
ui->textBrowser->setPlainText (titles[randomValue]);
}
}
else if(ui->romanceButton->isChecked())
{
QFile myfile(":/romance.txt");
if (myfile.open(QIODevice::ReadOnly))
{
QTextStream in(&myfile);
while (!in.atEnd())
{
QString line = in.readLine();
titles.append(line);
}
myfile.close();
ui->textBrowser->setPlainText (titles[randomValue]);
}
}
else if(ui->scifiButton->isChecked())
{
QFile myfile(":/scifi.txt");
if (myfile.open(QIODevice::ReadOnly))
{
QTextStream in(&myfile);
while (!in.atEnd())
{
QString line = in.readLine();
//titles.append(line);
}
myfile.close();
ui->textBrowser->setPlainText (titles[randomValue]);
}
}
答案 0 :(得分:1)
这是通用编程问题,可以更好地重构代码:
// I didn't dig into every line of the code. just provide the refactor idea here
void getTitle(const QString& file_name, QList<QString>& titles;)
{
QFile myfile(file_name);
if (myfile.open(QIODevice::ReadOnly))
{
QTextStream in(&myfile);
while (!in.atEnd())
{
QString line = in.readLine();
titles.append(line);
}
myfile.close();
}
}
void MovierRec::on_searchButton_clicked()
{
int randomValue = qrand() % 100;
QList<QString> titles;
if(ui->modernButton->isChecked())
{
getTitle("classics.txt", titles);
}
else if(ui->romanceButton->isChecked())
{
getTitle("romance.txt", titles);
}
else if(ui->scifiButton->isChecked())
{
getTitle("scifi.txt", titles);
}
ui->textBrowser->setPlainText(titles[randomValue]); // move the dup action to the end
}
答案 1 :(得分:0)
QT以信号和插槽而闻名。每个按钮都可以连接到一个插槽。例如你的情况。您可以将每个单选按钮连接到插槽。为此,请打开您的GUI表单,右键单击单选按钮并选择“转到插槽”,然后选择要连接的插槽。 这将在你的.cpp文件中创建一个空函数。
现在编写该按钮的代码。只有在按下/单击该特定按钮时才会调用此函数。
示例:
void ClassA::on_radioButton_clicked()
{
// write your code inside this function for , when this button is checked
}
我希望这可以帮助您解决问题。如果您有其他疑问,请提供更多信息。