【发布时间】:2020-02-16 08:44:44
【问题描述】:
GUI 加载并完美运行。我试过用一个简单的 cout 替换 runBackup() ,但这也不起作用。我相信问题出在我的按钮上。
功能:
namespace fs = std::filesystem;
static GtkWidget *backupDirs;
static GtkWidget *backupTo;
static GtkWidget *backupStatus_label;
void runBackup(GtkWidget *runBackup, gpointer data) {
std::string backup = gtk_entry_get_text(GTK_ENTRY(backupDirs));
std::ifstream backupFile(backup);
std::string backupLocation = gtk_entry_get_text(GTK_ENTRY(backupTo));
std::string line;
while (getline(backupFile, line)) {
fs::copy(line, backupLocation, fs::copy_options::recursive);
}
}
按钮:
runBackup = gtk_button_new_with_label("Begin Backup");
g_signal_connect(runBackup, "clicked", G_CALLBACK(runBackup), NULL);
gtk_grid_attach(GTK_GRID(grid), runBackup, 0, 4, 1, 1);
错误:
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
【问题讨论】:
-
static GtkWidget *backupDirs; static GtkWidget *backupTo; static GtkWidget *backupStatus_label;似乎是一个非常糟糕的主意。 -
gtk_entry_get_text(GTK_ENTRY(backupDirs)) 如果我不把这些指针放在那里就不起作用。
标签: c++ user-interface segmentation-fault gtk gtk3