c++ - wxWidgets - 如何不将任何内容推回 wxVector?
问题描述
我有一个应用程序,用户可以在其中插入文件wxDataViewListCtrl
,并有一个数据库来存储有关文件的所有信息。我有一个函数调用LoadDatabase()
来将数据库加载回应用程序,当用户关闭并重新启动应用程序时,它看起来像这样,
wxVector<wxVector<wxVariant>> Database::LoadDatabase(wxVector<wxVector<wxVariant>>& vecSet, wxTreeCtrl& favorite_tree, wxTreeItemId& favorite_item, wxTreeCtrl& trash_tree, wxTreeItemId& trash_item)
{
try
{
if (sqlite3_open("Samples.db", &m_Database) != SQLITE_OK)
{
wxLogDebug("Error opening DB");
throw sqlite3_errmsg(m_Database);
}
std::string load = "SELECT FAVORITE, FILENAME, SAMPLEPACK, TYPE, \
CHANNELS, LENGTH, SAMPLERATE, BITRATE, TRASHED \
FROM SAMPLES;";
rc = sqlite3_prepare_v2(m_Database, load.c_str(), load.size(), &m_Stmt, NULL);
if (rc == SQLITE_OK)
{
int row = 0;
while (SQLITE_ROW == sqlite3_step(m_Stmt))
{
wxLogDebug("Record found, fetching..");
int c1 = sqlite3_column_int(m_Stmt, 0);
wxString c2 = wxString(std::string(reinterpret_cast< const char* >(sqlite3_column_text(m_Stmt, 1))));
wxString c3 = wxString(std::string(reinterpret_cast< const char* >(sqlite3_column_text(m_Stmt, 2))));
wxString c4 = std::string(reinterpret_cast<const char *>(sqlite3_column_text(m_Stmt, 3)));
int c5 = sqlite3_column_int(m_Stmt, 4);
int c6 = sqlite3_column_int(m_Stmt, 5);
int c7 = sqlite3_column_int(m_Stmt, 6);
int c8 = sqlite3_column_int(m_Stmt, 7);
int c9 = sqlite3_column_int(m_Stmt, 8);
wxVector<wxVariant> vec;
if (c1 == 1)
{
vec.push_back(true);
vec.push_back(c2);
vec.push_back(c3);
vec.push_back(c4);
vec.push_back(wxString::Format("%d",c5));
vec.push_back(wxString::Format("%d",c6));
vec.push_back(wxString::Format("%d",c7));
vec.push_back(wxString::Format("%d",c8));
favorite_tree.AppendItem(favorite_item, c2);
}
else if (c9 == 1)
{
vec.push_back(false);
vec.push_back(c2);
vec.push_back(c3);
vec.push_back(c4);
vec.push_back(wxString::Format("%d",c5));
vec.push_back(wxString::Format("%d",c6));
vec.push_back(wxString::Format("%d",c7));
vec.push_back(wxString::Format("%d",c8));
trash_tree.AppendItem(trash_item, c2);
}
else
{
vec.push_back(false);
vec.push_back(c2);
vec.push_back(c3);
vec.push_back(c4);
vec.push_back(wxString::Format("%d",c5));
vec.push_back(wxString::Format("%d",c6));
vec.push_back(wxString::Format("%d",c7));
vec.push_back(wxString::Format("%d",c8));
}
vecSet.push_back(vec);
row++;
}
}
else
{
wxMessageDialog* msgDialog = new wxMessageDialog(NULL, "Error! Cannot load data from table.", "Error", wxOK | wxICON_ERROR);
msgDialog->ShowModal();
sqlite3_free(m_ErrMsg);
}
rc = sqlite3_finalize(m_Stmt);
sqlite3_close(m_Database);
}
catch (const std::exception &exception)
{
wxLogDebug(exception.what());
}
return vecSet;
}
我想要做的是,什么时候c9 == 1
不要将任何东西推回向量。但是如果我不推回向量,即注释else if
语句中的所有行,除非trash_tree.AppendItem(trash_item, c2);
它给我关于索引的错误。
编辑:我称之为LoadDatabase()
,
void Browser::RestoreDatabase()
{
try
{
wxVector<wxVector<wxVariant>> dataset;
if (db.LoadDatabase(dataset, *m_CollectionView, rootNode, *m_TrashedItems, trash_root_node).empty())
{
wxLogDebug("Error! Database is empty.");
}
else
{
for (auto data : dataset)
{
m_SampleListView->AppendItem(data);
}
}
}
catch (...)
{
std::cerr << "Error loading data." << std::endl;
}
}
SampleListView
这里是wxDataViewListCtrl
,我希望当c9 == 1
不返回任何内容时,只需将该项目的文件名附加到trash_tree
. 因为如果我推回任何内容,vec
它将被添加到SampleListView
.
解决方案
不确定我是否理解您的问题,但您的意思是这样吗?
wxVector<wxVariant> vec;
if (c9 == 1)
{
trash_tree.AppendItem(trash_item, c2);
}
else
{
if (c1 == 1)
{
vec.push_back(true);
favorite_tree.AppendItem(favorite_item, c2);
}
else
vec.push_back(false);
vecSet.push_back(vec);
vec.push_back(c2);
vec.push_back(c3);
vec.push_back(c4);
vec.push_back(wxString::Format("%d",c5));
vec.push_back(wxString::Format("%d",c6));
vec.push_back(wxString::Format("%d",c7));
vec.push_back(wxString::Format("%d",c8));
}
推荐阅读
- reactjs - React 中 Typescript 中的 onKeyPress 类型
- rust - 如何为 Rust 设置 makeprg?
- azure - 在 Azure 应用服务上运行的 ASP.NET Core 3.1 应用针对 1.6 MB json 有效负载引发 EPIPE 错误
- c++ - 定义非常量内联静态成员对编译有什么影响?
- c# - 使用 Response.AddHeader("content-disposition", attachment) 时如何防止跨站点脚本漏洞?
- typescript - 打字稿说属性推送不适用于“位置 [] | Thenable
" - .net-core - 如何使用私人密钥和 rsasha256 算法 (.net) 创建 jwt 签名?
- mysql - 如何在 SQL 模式中正确设计 2 个表?
- python - 如何生成点分隔字符串的子字符串?
- javascript - 使用 vanilla Javascript 构建购物车功能