C++17 有一个新的语法来声明以下形式的变量:
auto [x, y, z] = f();
其中f()是返回复合对象(数组、元组、结构等)的函数。
这个语法叫什么,它有什么作用?
C++17 有一个新的语法来声明以下形式的变量:
auto [x, y, z] = f();
其中f()是返回复合对象(数组、元组、结构等)的函数。
这个语法叫什么,它有什么作用?
你能给出一个关于表索引的清晰示例吗?文档说了这么多,这是误导。索引是主键还是外键?
n物理核心数在哪里。我已经不止一次遇到过这条规则,但我就是不明白为什么要这样做,以及它是否总是比创建n线程更有效率。
每次将 1/8" 音频插孔从插孔中部分移除时,人声似乎被静音了,就像我在听卡拉 OK 版本一样。据我了解插孔的设计,这是不可能的,但是,我不是唯一注意到这种效果的人。
当音频插孔被部分移除时,是什么导致人声静音?
你好。我正在编写一个用于处理笔记的小程序。现在已经实现了最低限度的功能:可以创建、编辑和删除注释。对于 GUI,我有 Qt,基础是 SQLite。一般来说,一切正常,做我想做的事。但是我的编程经验趋于零,所以我怀疑有很多缺点我无法修复,因为我不知道去哪里找。我希望您指出所有明显的错误/问题/缺点。对从划分到类的逻辑到可能的内存泄漏的一切都感兴趣。
现在基本上有 12 个类:
MattyNotesMainWindow, MattySettingsDialog, addNoteDialog,MattyMessageBoxDbManagerQueryConstructorMattyNoteMattyGroupBoxNoteHolderMattyStyleSheetEditorConstantsMattyClocks我知道不太可能有人会校对所有代码,因此也许您可以查看类及其方法并说出哪些是多余的,或者查看任何一个类并指出其中的缺陷。
例如连接数据库、编辑已有笔记、从数据库中删除所有笔记等功能:
bool DbManager::connect(const QString & path)
{
MattyNotesDb = QSqlDatabase::addDatabase("QSQLITE");
MattyNotesDb.setDatabaseName(path);
if(QFile::exists(path))
{
if (!MattyNotesDb.open())
{
showIsNotOpenedError();
MattyNotesDb.close();
return false;
}
else
{
PathToDb = MattyNotesDb.databaseName();
}
return true;
}
else
{
return false;
}
}
bool DbManager::editNote(MattyNote & Note, int NoteId)
{
if (connected())
{
QueryConstructor Edit;
Edit.setTableName(QStringLiteral("Notes"));
Edit.addWhereFieldValue(QStringLiteral("NoteId"), QString::number(NoteId));
QMap<QString, QString> NoteTemp;
NoteTemp["NoteTitle"] = "\'" + Note.getTitle() + "\'";
NoteTemp["NoteType"] = "\'" + Note.getType() + "\'";
NoteTemp["NoteText"] = "\'" + Note.getText() + "\'";
NoteTemp["EventTime"] = "\'" + Note.getEventTime() + "\'";
NoteTemp["EventDate"] = "\'" + Note.getEventDate() + "\'";
NoteTemp["CrTime"] = "\'" + Note.getCrTime() + "\'";
NoteTemp["CrDate"] = "\'" + Note.getCrDate() + "\'";
NoteTemp["TypeId"] = QString::number(Note.getTypeId());
Edit.setWhatToSetFieldValue(NoteTemp); //
QSqlQuery editNoteQuery;
return editNoteQuery.exec(Edit.constructUpdateQuery());
}
else
{
return false;
}
}
QVector<MattyNoteRow> DbManager::showNotes()
{
if (connected())
{
QVector<MattyNoteRow> VectorOfNoteRows;
QueryConstructor SelectAllNotes;
SelectAllNotes.setTableName(QStringLiteral("Notes"));
SelectAllNotes.setOrderByClause("NoteId", Descending);
QSqlQuery getAllNotesQuery(MattyNotesDb);
if( getAllNotesQuery.exec(SelectAllNotes.constructSelectQuery()))
{
while (getAllNotesQuery.next())
{
MattyNoteRow Row;
Row.NoteId=getAllNotesQuery.value("NoteId").toInt();
Row.NoteTitle=getAllNotesQuery.value("NoteTitle").toString();
Row.NoteType=getAllNotesQuery.value("NoteType").toString();
Row.NoteText=getAllNotesQuery.value("NoteText").toString();
Row.EventTime=getAllNotesQuery.value("EventTime").toString();
Row.EventDate=getAllNotesQuery.value("EventDate").toString();
Row.CrTime=getAllNotesQuery.value("CrTime").toString();
Row.CrDate=getAllNotesQuery.value("CrDate").toString();
Row.TypeId=getAllNotesQuery.value("TypeId").toInt();
VectorOfNoteRows.push_back(Row);
}
}
else
{
QMessageBox::critical(NULL, QObject::tr("Error"), getAllNotesQuery.lastError().text());
}
return VectorOfNoteRows;
}
else
{
return QVector<MattyNoteRow>();
}
}
将注释发送到表单:
void NoteHolder::publishNotes(QWidget* ParentWidget)
{
erasePublishedNotes(ParentWidget);
getAllNotes();
QVector<class MattyNote>::iterator NoteNumber;
int i;
for (NoteNumber = ListOfAllNotes.begin(), i=0; NoteNumber < ListOfAllNotes.end();NoteNumber++, i++)
{
MattyGroupBox* MyGroupBox = new MattyGroupBox(*NoteNumber, ParentWidget);
ParentWidget->layout()->addWidget(MyGroupBox);
}
}
void NoteHolder::erasePublishedNotes(QWidget* ParentWidget)
{
MattyGroupBox* MgbTemp;
while ((MgbTemp = ParentWidget->findChild<MattyGroupBox*>()) != 0)
{
delete MgbTemp;
}
QGroupBox* GbTemp;
while ((GbTemp = ParentWidget->findChild<QGroupBox*>()) != 0)
{
delete GbTemp;
}
}
void NoteHolder::getAllNotes()
{
TotalNoteCount = 0;
if (!ListOfAllNotes.isEmpty())
ListOfAllNotes.clear();
QVector<struct MattyNoteRow> ListOfRows = DbManager::showNotes();
for (int i = 0; i < ListOfRows.length();i++)
{
MattyNote TempNote(ListOfRows[i]);
ListOfAllNotes.append(TempNote);
TotalNoteCount++;
}
}
整个源代码可以在这里看到:GitHub
分离成类、它们的方法、调用、依赖关系等。这里:doxygen