小编tom*_*tom的帖子

有没有办法在emacs lisp中取消定义一个函数?

我有一个创建功能的宏.它基于当前打开的缓冲区创建交互式功能.然而,在长时间运行的部分后,它开始充斥Mx.有没有办法使函数无效?

emacs elisp function

14
推荐指数
1
解决办法
800
查看次数

QFileSystemModel rowCount 未按预期工作

我正在尝试模型/视图编程中的一个示例。

http://doc.qt.io/qt-5/model-view-programming.html

为了演示如何使用模型索引从模型中检索数据,我们设置了一个没有视图的 QFileSystemModel,并在小部件中显示文件和目录的名称。尽管这没有显示使用模型的正常方式,但它演示了模型在处理模型索引时使用的约定。

我们通过以下方式构建文件系统模型:

QFileSystemModel *model = new QFileSystemModel;
QModelIndex parentIndex = model->index(QDir::currentPath());
int numRows = model->rowCount(parentIndex);
Run Code Online (Sandbox Code Playgroud)

在本例中,我们设置一个默认的 QFileSystemModel,使用该模型提供的 index() 的特定实现获取父索引,并使用 rowCount() 函数计算模型中的行数。

这是我的代码:

QFileSystemModel* model = new QFileSystemModel;
QModelIndex parentIndex = model->index(QDir::currentPath());
qDebug() << QDir::currentPath();
// "/media/Local Data/Files/Programming/C++/build-DemostrateQModelIndex-Desktop_Qt_5_5_1_GCC_64bit-Debug"
qDebug() << "RowCount is " << model->rowCount(parentIndex);
Run Code Online (Sandbox Code Playgroud)

但 RowCount 始终为 0。

在“build-DemostrateQModelIndex-Desktop_Qt_5_5_1_GCC_64bit-Debug”文件夹中,里面有文件和文件夹。我预计行数应该是里面的项目数。

我还尝试初始化 QFileSystemModel;

QFileSystemModel* model = new QFileSystemModel;
model->setRootPath(QDir::rootPath());
QModelIndex parentIndex = model->index(QDir::currentPath());
qDebug() << "RowCount is " << model->rowCount(parentIndex);
Run Code Online (Sandbox Code Playgroud)

RowCount 仍然为 0。

更新 1:应用 Johannes Schaub 的建议。我QEventLoop …

c++ qt rowcount qfilesystemmodel

6
推荐指数
1
解决办法
2089
查看次数

有没有办法获取当前函数的函数名?

(defun foo ()
    (send-to-debug-log "Error. Function terminated." (get-current-function-name)))
Run Code Online (Sandbox Code Playgroud)

我目前正在这样做:

(defun foo ()
    (send-to-debug-log "Error. Function terminated." 'foo)))
Run Code Online (Sandbox Code Playgroud)

硬编码函数名称似乎不是一个好习惯。有关实施get-current-function-name或的任何建议get-function-name-that-call-me

debugging emacs elisp function

6
推荐指数
1
解决办法
678
查看次数

如何通过完成读取来返回值而不是键

(completing-read
 "Complete a foo: "
 '(("foobar1" "~/foobar1/") ("barfoo" "/usr/barfoo/") ("foobaz" "/hello/")))
Run Code Online (Sandbox Code Playgroud)

如上图所示,我想提示"foobar1","barfoo""foobaz"但得到的回报配对目录.

Moverover,如果我有这样的哈希表

(cl-defstruct person ID name)
(setq person-object (make-person :ID 123 :name "foo"))
(setq person-table (make-hash-table))
(pushash (person-ID person-object) person-object person-table)
Run Code Online (Sandbox Code Playgroud)

我如何提示输入此人姓名但获得人身份证明作为回报?

lisp emacs elisp completion

5
推荐指数
2
解决办法
457
查看次数

Qt的:: WA_DeleteOnClose

我正在学习Qt,并在"Qt开发的基础"一书中尝试了一些例子.在本书中,有一节教授单文档界面,其中一个示例创建了一个简单的应用程序,如记事本.

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setAttribute(Qt::WA_DeleteOnClose);
    setWindowTitle(QString("%1[*] - %2").arg("unnamed").arg("SDI"));

    connect(ui->docWidget->document(), SIGNAL(modificationChanged(bool)), this, SLOT(setWindowModified(bool)));

    createActions();
    createMenu();
    createToolbars();

    statusBar()->showMessage("Done");    
}
Run Code Online (Sandbox Code Playgroud)

书中说"设置windows属性,Qt::WA_DeleteOnClose以便Qt在关闭后立即从内存中删除窗口.

这个怎么运作?

因为如果我使用setAttribute(Qt::WA_DeleteOnClose);,当我结束程序时,有一个Debug Assertion Failed warning:_BLOCK_TYPEIS_VALID(pHead->nBlockUse).如果setAttribute删除它没有问题.

c++ qt toolbar

4
推荐指数
1
解决办法
8328
查看次数

Qt中的亲子关系

我想清除在创建子项时如何删除子项的概念new

此代码示例来自http://doc.qt.io/qt-4.8/qsignalmapper.html

ButtonWidget::ButtonWidget(QStringList texts, QWidget *parent)
    : QWidget(parent)
{
    signalMapper = new QSignalMapper(this);

    QGridLayout *gridLayout = new QGridLayout;
    for (int i = 0; i < texts.size(); ++i) {
        QPushButton *button = new QPushButton(texts[i]);
        connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
        signalMapper->setMapping(button, texts[i]);
        gridLayout->addWidget(button, i / 3, i % 3);
    }

    connect(signalMapper, SIGNAL(mapped(const QString &)),
            this, SIGNAL(clicked(const QString &)));

    setLayout(gridLayout);
}
Run Code Online (Sandbox Code Playgroud)
  1. signalMapper

    由于它是使用parameter构造的,因此删除this父对象时ButtonWidget,它也会被删除。

    它是否正确?

  2. gridLayout

    为什么不gridLayout要求由创建new QGridLayout(this)

  3. button

    它是在for循环中创建的,这意味着它将在每个循环之后超出范围。在正常情况下,如果未在循环内将其删除,则应该存在内存泄漏。那么,它会导致该程序中的内存泄漏吗?

c++ qt parent-child

3
推荐指数
1
解决办法
832
查看次数

如何在qt中删除之前检查指针是否存在

我正在使用一个QAbstractTableModel. 该模型在其中保存数据。它是根据用户点击创建和删除的。

这是用户点击创建模型后连接的槽:

void clicked(){
    model = new QAbstractTableModel(data);
    model->setManyThings();
}
Run Code Online (Sandbox Code Playgroud)

这是用户点击清除模型后连接的插槽:

void clear(){
    if (model != nullptr)
        delete model;
}
Run Code Online (Sandbox Code Playgroud)

但是,这无法检查是否model存在。如果我点击两次清除,程序会直接崩溃。如果我点击清除没有创建模型,程序就直接崩溃​​了。

那么如何检查模型是否存在

c++ qt delete-operator

1
推荐指数
1
解决办法
7852
查看次数