对于使用roxygen(2)记录类,指定标题和描述/细节似乎与函数,方法,数据等相同.但是,插槽和继承是它们自己的动物类型.在roxygen2中记录S4类的最佳实践 - 当前或计划的最佳实践是什么?
尽职调查:
我@slot
在早期的roxygen描述中发现了一个标签.
2008 R-forge邮件列表帖
似乎表明这已经死了,并且没有对@slot
roxygen的支持:
roxygen2是真的吗?前面提到的帖子建议用户应该使用LaTeX标记创建自己的逐项列表.例如,扩展"character"
该类的新S4类将被编码并记录如下:
#' The title for my S4 class that extends \code{"character"} class.
#'
#' Some details about this class and my plans for it in the body.
#'
#' \describe{
#' \item{myslot1}{A logical keeping track of something.}
#'
#' \item{myslot2}{An integer specifying something else.}
#'
#' \item{myslot3}{A data.frame holding some data.}
#' }
#' @name mynewclass-class
#' @rdname mynewclass-class
#' @exportClass mynewclass
setClass("mynewclass",
representation(myslot1="logical",
myslot2="integer",
myslot3="data.frame"), …
Run Code Online (Sandbox Code Playgroud) 有谁知道R中的插槽是什么?
我没有找到其含义的解释.我得到一个递归定义:"Slot函数返回或设置有关对象的各个槽的信息"
感谢帮助,谢谢 - 胡同
有一个类QNetworkReply的对象.有一个插槽(在某些其他对象中)连接到其finished()信号.信号是同步的(默认值).只有一个主题.
在某些时刻,我想摆脱两个对象.没有更多的信号或任何东西.我希望他们走了.好吧,我想,我会用的
delete obj1; delete obj2;
Run Code Online (Sandbox Code Playgroud)
但我真的可以吗?~QObject的规格说:
等待传递挂起事件时删除QObject可能会导致崩溃.
什么是"待定事件"?这是否意味着当我打电话给我时delete
,已经有一些"未决事件"要发送,并且它们可能会导致崩溃,我无法确定是否有任何?
所以我要说我打电话:
obj1->deleteLater(); obj2->deleteLater();
Run Code Online (Sandbox Code Playgroud)
为了安全起见.
但是,我真的很安全吗?该deleteLater
补充说,将在主回路控制时到达那里进行处理的事件.是否有一些待处理事件(信号)obj1
或obj2
已经存在,等待在处理deleteLater 之前在主循环中处理?那将是非常不幸的.我不想编写"有点删除"状态的代码检查,并忽略所有插槽中的传入信号.
Qt 文档说明可以将两个信号连接在一起:
甚至可以将信号直接连接到另一个信号.
我试过了:
connect(x, SIGNAL(S()), y, SIGNAL(func()));
Run Code Online (Sandbox Code Playgroud)
它的工作原理如上所述,但Qt文档仍在继续:
(每当发射第一个信号时,这将立即发出第二个信号.)
这是否意味着QueuedConnection无法正常工作?我可以跨线程连接两个信号吗?
我之所以这样问是因为我通过避免这种情况解决了应用程序中的一类崩溃问题,但我不确定这是否与将信号连接在一起有关.
新的Qt5信号和插槽语法使我们不仅可以将信号连接到插槽,还可以连接普通旧功能和仿函数/ lambda.现在的问题是,lambdas是带有()运算符的必要对象,当你将信号连接到它们时,它们会被复制到qt内部类的某个地方.并且,当您从该仿函数断开信号时,它将保留在qt内部.我不明白,这是正常的行为吗?或者也许有一种方法可以在断开连接后销毁这些功能对象?
这是一个例子:
//example
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTimer* timer = new QTimer();
QSharedPointer<QMetaObject::Connection> connection(new QMetaObject::Connection());
//functor is created and gets copied inside qt internals, connection variable is captured
//inside the functor
*connection.data() = QObject::connect(timer, &QTimer::timeout, [=]
{
qDebug() << "disconnected";
QObject::disconnect(*connection.data());
});
timer->start(10000);
return a.exec();
}
//example
Run Code Online (Sandbox Code Playgroud)
现在,当我在插槽断开后查看连接变量的强引用计数时,它会保持2,这意味着仿函数对象本身仍然存活且很好,尽管现在对我没用.我错过了什么吗?
或其他方式来表达我的问题(虽然它没有解决我的问题):'QObject :: QObject'无法访问类'QObject'中声明的私有成员
我的课程中需要SIGNALs和SLOTS功能,但我认为不可能从中衍生出来QObject
?
class MyClass
{
signals:
importantSignal();
public slots:
importantSlot();
};
Run Code Online (Sandbox Code Playgroud)
问题似乎是我需要派生QObject
来使用信号和插槽......但我需要默认的构造函数MyClass
.但由于以下特性,我无法构造它们QObject
:
No Copy Constructor或Assignment Operator.
我试了很多......
所以我的上课看起来像这样:
#include <QObject>
class MyClass: public QObject
{
Q_OBJECT
public:
explicit MyClass(QObject *parent = 0); //autogenerated by qtcreator for QObject derived class
MyClass(const MyClass * other);
signals:
importantSignal();
public slots:
importantSlot();
};
Run Code Online (Sandbox Code Playgroud)
我需要默认的构造函数MyClass
.
那么有没有可能避免"'QObject :: QObject'无法访问类'QObject'中声明的私有成员"错误?
或者作为替代方案是否有可能没有使用信号和插槽QObject
?
我很高兴有任何建议.
平台:
Darwin * -*s-MacBook-Pro.local 11.4.2 Darwin内核版本11.4.2:8月23日星期四16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64 x86_64
Ruby:
ruby 2.0.0p0(2013-02-24修订版39474)[x86_64-darwin11.4.2](由rvm安装)
Qt:
qt:稳定4.8.4(瓶装),HEAD
代码:
require 'Qt'
class Foo < Qt::Object
signals :my_signal #also tried 'my_signal()'
slots 'my_slot()'
def initialize(parent = nil)
super(parent)
puts "connecting signal and slot"
Qt::Object.connect(self, SIGNAL('my_signal()'), self, SLOT('my_slot()'))
# also tried => connect(self, SIGNAL('my_signal()'), self, SLOT('my_slot()'))
end
def emit_my_signal
puts "sending signal"
emit my_signal
end
def my_slot
puts "received message from signal"
end
end
o = Foo.new
o.emit_my_signal
Run Code Online (Sandbox Code Playgroud)
输出: …
当我有一个插槽主体的自定义实现时,我无法弄清楚如何使用Vuetify v2为我的数据表实现全选选项。
这是一个小例子:
<template>
<v-card
max-width="300"
class="pa-6"
>
<v-data-table
:items="tasks"
:headers="headers"
show-select
dense
>
<template v-slot:body="{ items }">
<tbody>
<tr
v-for="item in items"
:key="item.id"
>
<td>
<v-checkbox
v-model="selectedTasks"
:value="item.id"
style="margin:0px;padding:0px"
hide-details
/>
</td>
<td>{{ item.text }}</td>
<td>
<v-btn
text
icon
x-small
>
<v-icon>pageview</v-icon>
</v-btn>
</td>
</tr>
</tbody>
</template>
</v-data-table>
</v-card>
</template>
Run Code Online (Sandbox Code Playgroud)
<script>
export default {
data() {
return {
headers: [
{ text: 'task', value: 'text' },
{ text: 'actions' }
],
selectedTasks: [] …
Run Code Online (Sandbox Code Playgroud) 首先,我有一个QWidget
s 列表,我不知道运行时的长度.然后我创建了一个QListWidget
我显示它们的位置,当有人点击它们时,我使用信号currentItemChanged(QListWidgetItem*, QListWidgetItem*)
来捕获它并获得被点击项目的索引.
现在我想做一个类似的事情QMenu
.当QMenu
它及其动作构建时我会知道列表,但是我将无法对其进行硬编码.
如何根据菜单列表中的操作位置(索引)创建操作,捕获信号并将它们连接到同一个插槽,这些插槽会执行不同的操作?必须有一些方法来解决这个问题,因为其他应用程序使用它.我试着看一下映射,但我无法理解如何使用它.
我试图抓住sender
插槽,但无法从中获取任何有用的信息.
如何将函数"指针"从JavaScript传递到插槽?
在JavaScript中:
function f1()
{
alert("f1");
}
qtclass.submit(f1);
Run Code Online (Sandbox Code Playgroud)
在Qt:
public slots:
void submit(void * ptr)
{
(void)ptr;
}
Run Code Online (Sandbox Code Playgroud)
我需要"f1"函数,一旦完成某些处理,就会从c ++中激活JavaScript.另外我事先并不知道函数指针的名称.