标签: slot

如何使用Roxygen2正确记录S4类插槽?

对于使用roxygen(2)记录类,指定标题和描述/细节似乎与函数,方法,数据等相同.但是,插槽和继承是它们自己的动物类型.在roxygen2中记录S4类的最佳实践 - 当前或计划的最佳实践是什么?

尽职调查:

@slot在早期的roxygen描述中发现了一个标签. 2008 R-forge邮件列表帖 似乎表明这已经死了,并且没有对@slotroxygen的支持:

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 class slot s4 roxygen2

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

R:什么是老虎机?

有谁知道R中的插槽是什么?

我没有找到其含义的解释.我得到一个递归定义:"Slot函数返回或设置有关对象的各个槽的信息"

感谢帮助,谢谢 - 胡同

oop r slot s4 r-faq

75
推荐指数
3
解决办法
3万
查看次数

delete和deleteLater如何处理Qt中的信号和插槽?

有一个类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补充说,将在主回路控制时到达那里进行处理的事件.是否有一些待处理事件(信号)obj1obj2已经存在,等待在处理deleteLater 之前在主循环中处理?那将是非常不幸的.我不想编写"有点删除"状态的代码检查,并忽略所有插槽中的传入信号.

qt slot qt-signals

73
推荐指数
3
解决办法
5万
查看次数

Qt使用QueuedConnection将两个信号连接在一起

Qt 文档说明可以将两个信号连接在一起:

甚至可以将信号直接连接到另一个信号.

我试过了:

connect(x, SIGNAL(S()), y, SIGNAL(func()));
Run Code Online (Sandbox Code Playgroud)

它的工作原理如上所述,但Qt文档仍在继续:

(每当发射第一个信号时,这将立即发出第二个信号.)

这是否意味着QueuedConnection无法正常工作?我可以跨线程连接两个信号吗?

我之所以这样问是因为我通过避免这种情况解决了应用程序中的一类崩溃问题,但我不确定这是否与将信号连接在一起有关.

qt signals thread-safety slot

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

Qt5新信号到lambda连接内存泄漏

新的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,这意味着仿函数对象本身仍然存活且很好,尽管现在对我没用.我错过了什么吗?

c++ signals slot c++11 qt5

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

如何在不派生QObject的情况下使用SIGNAL和SLOT?

或其他方式来表达我的问题(虽然它没有解决我的问题):'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

我很高兴有任何建议.

c++ qt qobject slot qt-signals

16
推荐指数
2
解决办法
2万
查看次数

QtRuby发射不起作用

平台:

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)

输出: …

ruby qt signals slot emit

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

使用自定义表体实现选择 Vuetify 数据表的所有行

当我有一个插槽主体的自定义实现时,我无法弄清楚如何使用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)

datatable slots slot vue.js vuetify.js

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

如何将QActions列表添加到QMenu并使用单个插槽处理它们?

首先,我有一个QWidgets 列表,我不知道运行时的长度.然后我创建了一个QListWidget我显示它们的位置,当有人点击它们时,我使用信号currentItemChanged(QListWidgetItem*, QListWidgetItem*)来捕获它并获得被点击项目的索引.

现在我想做一个类似的事情QMenu.当QMenu它及其动作构建时我会知道列表,但是我将无法对其进行硬编码.

如何根据菜单列表中的操作位置(索引)创建操作,捕获信号并将它们连接到同一个插槽,这些插槽会执行不同的操作?必须有一些方法来解决这个问题,因为其他应用程序使用它.我试着看一下映射,但我无法理解如何使用它.

我试图抓住sender插槽,但无法从中获取任何有用的信息.

c++ qt slot qmenu

12
推荐指数
2
解决办法
1万
查看次数

Qt QWEBview JavaScript回调

如何将函数"指针"从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.另外我事先并不知道函数指针的名称.

javascript qt qwebview slot

11
推荐指数
2
解决办法
2万
查看次数

标签 统计

slot ×10

qt ×6

c++ ×3

signals ×3

qt-signals ×2

r ×2

s4 ×2

c++11 ×1

class ×1

datatable ×1

emit ×1

javascript ×1

oop ×1

qmenu ×1

qobject ×1

qt5 ×1

qwebview ×1

r-faq ×1

roxygen2 ×1

ruby ×1

slots ×1

thread-safety ×1

vue.js ×1

vuetify.js ×1