我正在使用vim进行编程.在一天开始时,我将打开一个文件并继续进行几个窗口拆分并将一些文件打开到缓冲区中,以便它们随时可用.直到最近,这才起作用.
然而,在过去一周左右,情况发生了变化; 我的一个可写缓冲区正在切换到只读,我不明白为什么.这是命令序列:
对于步骤1-4,所有窗口都是可编辑的.当我执行步骤5时,新文件浏览窗口是只读的(如预期的那样),但现在持有fileA.cpp的窗口也被标记为只读.fileA.h仍然可以编辑.为什么会这样?
为了让我更加困惑,如果我不做第4步就没有问题(即我将窗口分开,保存fileA.cpp而不是fileA.h).另外,如果我在步骤5中执行'sp fileB.h'而不是首先拆分到文件浏览器,则没有问题.
我刚刚将我的arch linux系统更新到包含gcc 7.1.1的最新版本.试图建立这个:
#include <functional>
int main(int argc, char** argv) {
return 1;
}
Run Code Online (Sandbox Code Playgroud)
使用命令
clang++ main.cpp -std=c++1z
Run Code Online (Sandbox Code Playgroud)
导致错误:
In file included from main.cpp:1:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/functional:60:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/unordered_map:47:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/bits/hashtable.h:37:
In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/bits/node_handle.h:39:
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:1032:27: error: use of class template 'optional'
requires template arguments
template <typename _Tp> optional(_Tp) -> optional<_Tp>;
^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:451:11: note: template is declared here
class optional
^
/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/7.1.1/../../../../include/c++/7.1.1/optional:1032:40: error: expected ';' at end of declaration
template <typename …Run Code Online (Sandbox Code Playgroud) 我有一个简单的类来存储传感器数据,可以概括为
class Data
{
public:
Data(){timestamp = Time::now(); id = sNextID++; data = 0; type = DATA_TYPE_UNKNOWN;}
double data;
Time timestamp;
DataType type;
private:
static unsigned int sNextID;
};
Run Code Online (Sandbox Code Playgroud)
我有一个头文件,声明了一堆类似的数据类.鉴于类的简单性,不需要实现cpp文件.
问题是,如果没有实现文件,我该如何初始化sNextID?我在某个地方看到它默认为0这样会好的,虽然依赖它似乎有点hackish.但更重要的是,如果没有在某个地方初始化它,链接器就会抱怨未定义的引用.
在我的应用程序中,我有一个工作线程在文件列表中进行迭代,并且尝试更新GUI表视图以指示当前文件是什么。在我的工作线程中,当我启动一个新文件时,有以下行:
emit runOnGui([this,row](){ui.tblFiles->selectRow(row);});
Run Code Online (Sandbox Code Playgroud)
其中runOnGui是信号,通过以下方式处理:
connect(this, &MainWindow::runOnGui, [this](function<void()> action){
action();
});
Run Code Online (Sandbox Code Playgroud)
我的理解是,action()现在应该在UI线程上运行,但是有时(并非总是如此)这对我来说是段错误。回溯看起来像:
#0 0x00007ffff537c28a in ?? () from /usr/lib/libQt5Core.so.5
#1 0x00007ffff537cf23 in ?? () from /usr/lib/libQt5Core.so.5
#2 0x00007ffff537d047 in ?? () from /usr/lib/libQt5Core.so.5
#3 0x00007ffff5376943 in QItemSelection::merge(QItemSelection const&, QFlags<QItemSelectionModel::SelectionFlag>) () from /usr/lib/libQt5Core.so.5
#4 0x00007ffff5379e43 in QItemSelectionModel::select(QItemSelection const&, QFlags<QItemSelectionModel::SelectionFlag>) () from /usr/lib/libQt5Core.so.5
#5 0x00007ffff6d97511 in ?? () from /usr/lib/libQt5Widgets.so.5
#6 0x0000000000465193 in MainWindow::<lambda()>::operator()(void) const (__closure=0x7fffda262710) at <...>/MainWindow.cpp:248
#7 0x00000000004682c8 in std::_Function_handler<void(), MainWindow::pushFiles()::<lambda()> >::_M_invoke(const std::_Any_data &) (__functor=...) at /usr/include/c++/6.2.1/functional:1740
#8 0x0000000000472722 in std::function<void …Run Code Online (Sandbox Code Playgroud) 我知道 QDialog 应该默认定位在父窗口的中心,但我显然错过了一些微妙之处。我有一个从 QWidget 派生的对象,我正在尝试使用以下测试代码创建一个以该对象为中心的子对话框
QDialog *dialog = new QDialog(this);
QPoint dialogPos = dialog->mapToGlobal(dialog->pos());
QPoint thisPos = mapToGlobal(this->pos());
dialog->exec();
Run Code Online (Sandbox Code Playgroud)
当我这样做时,对话框出现在我窗口的左上角。dialogPos 是 (0,0) 而 thisPos 是 (808, 371)。
我错过了什么?为什么对话框没有像我期望的那样居中显示?