创建一个高效的函数
Posted
技术标签:
【中文标题】创建一个高效的函数【英文标题】:Creating an Efficient Function 【发布时间】:2012-11-27 06:47:15 【问题描述】:我是第四周学习 C++ 的初学者;我一直在研究 CodeBlocks,但由于我对制作 GUI 感兴趣,我转而使用 Qt Creator。回到 CodeBlocks,我创建了一个函数,可以避免下面代码中的所有重复,只更改“TXT 文件”。但是,使用 Qt Creator 的“专用”C++,我很难理解如何创建一个函数来避免所有这些重复。
有什么想法吗? (我对这个 Qt 项目太深入了,无法回到 CodeBlocks。)
“TXT 文件”会根据用户选择的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]);
【问题讨论】:
QtCreator 不做“专门的 C++”,只是做普通的 C++。 Qt 使用一些宏来生成额外的代码,这不会使它成为另一种语言或任何正常的 C++ 代码不起作用。 可能与您的术语有关,但 IDE 选择与创建函数有什么关系?另外,Qt Creator 只是带有集成编辑器的普通 IDE,“专业 C++”是什么意思?您是在混合 Qt(GUI 框架)和 Qt Creator(IDE,适用于所有 C 和 C++ 编码,而不仅仅是 Qt),以及 Qt Creator 的“Designer”组件吗? 另外,对于每个说 QT 的人来说,这意味着(至少)Apple QuickTime。 Qt 是 C++ GUI 框架。 我猜发生的事情是我对在所有事情之前必须使用这个“Q”的方式(如在 QList、QVector、QFile 等)与使用方式相比有点不知所措我在 CodeBlocks 工作(仅使用 TextStream、Vector 等)。由于缺乏经验,可能无法正确解释自己,但关键是我在“措辞”函数时遇到了麻烦,而不是函数的逻辑。 【参考方案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
【讨论】:
感谢您的快速回复!我会研究它,看看我是否可以正确实施它!再次感谢! 您的代码运行起来像黄油一样流畅,感谢您的快速课程!绝对会在未来的编码中关注这一点。【参考方案2】:QT 以信号和槽而闻名。每个按钮都可以连接到一个插槽。例如在你的情况下。您可以将每个单选按钮连接到一个插槽。为此,打开您的 GUI 表单,右键单击单选按钮并选择“Go To Slot”,然后选择要连接的插槽。 这将在您的 .cpp 文件中创建一个空函数。
现在为该按钮编写代码。并且仅当按下/单击该特定按钮时才调用此函数。
示例:
void ClassA::on_radioButton_clicked()
// write your code inside this function for , when this button is checked
希望这能帮助您解决问题。如果您有其他疑问,请提供更多信息。
【讨论】:
以上是关于创建一个高效的函数的主要内容,如果未能解决你的问题,请参考以下文章