标签: slot

将 QList<QString>* 传递给来自 QThread 的信号

在我的 qt 应用程序中,我有一个类(worker),它是从在线程中运行的对象调用的。在我的工人阶级中,我创建了 QList,如下所示

QList <QString> albums;

while (i.hasNext())
{
  QRegularExpressionMatch album = i.next();
  albums.append(album.captured("album"));
}
emit SignalGotAlbums(albums);
Run Code Online (Sandbox Code Playgroud)

我在另一个包装我的工作线程的类中收到这个信号,以供线程使用。我们将此类命名为 GetAlbumsThread。在那里我成功地在插槽中接收到 SignalGotAlbums

void GetAlbumsThread::Reply(QList <QString> &list)
{

 emit gotAlbums(list);
 emit finished();
}
Run Code Online (Sandbox Code Playgroud)

在这个插槽中,我正在触发另一个信号gotAlbums,该信号应该与我的gui线程中的插槽连接,并将我的QList传递到那里。我的问题是,当我尝试将 QList 从线程传递到 gui 时,它不起作用!插槽未收到 gotAlbums 信号;

信号声明如下:

void gotAlbums(QList<QString> &);
Run Code Online (Sandbox Code Playgroud)

并连接到我的 gui 插槽(当然在我的 gui 线程中),如下所示:

private slots:
    void AlbumsReceived(QList<QString> &list)
    ...

    QThread* albumsThread = new QThread();

    GetAlbumsThread *albumsObject = new GetAlbumsThread();

    albumsObject->moveToThread(albumsThread);

    connect(albumsThread, SIGNAL(started()), albumsObject, SLOT(process()));

    connect(albumsObject, SIGNAL(gotAlbums(QList<QString> &)), this, SLOT(AlbumsReceived(QList<QString> &));

     albumsThread->start();
Run Code Online (Sandbox Code Playgroud)

由于某种原因,AlbumsReceived 从未被调用。连接返回真。有人可以帮我弄这个吗。我认为问题在于线程之间传递 QList。

qt multithreading signals qlist slot

4
推荐指数
2
解决办法
7994
查看次数

QT更新值信号/插槽的最佳实践

您认为设计信号/插槽交互以更新类中的成员值的最佳做法是什么?

例如,考虑在UI上表示的成员变量.用户更改UI中的值.存在信号/槽关系以通过成员变量更新功能自动更新成员变量.

我们还希望在UI上自动更新成员变量的更改,因此另一种方式存在信号/插槽关系.在通过更新功能更新成员变量时,信号触发UI更新.

你如何防止这些成为循环?它是否像调用成员变量更新函数时检查新值与当前值一样简单,如果存在差异,仅发送信号以更新UI?

或者......有更优雅的方式吗?

qt signals slot

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

PyQT QTabWidget currentChanged

我正在尝试构建一个在QTabWidget中加载几个网页的小应用程序.这已经很好了.现在我希望在更改当前Tab时重新加载tabs/QWebViews.

我认为将函数"onChange"连接到currentChanged-Event存在问题.

这是我的代码:



    #!/usr/bin/env python

    import sys, os
    from PyQt4.QtCore import *
    from PyQt4.QtGui import *
    from PyQt4.QtWebKit import *
    from PyQt4.QtNetwork import *
    from PyQt4 import QtCore, QtGui, QtWebKit
    from PyQt4.QtWebKit import QWebView


    class BaseWindow(QtGui.QMainWindow):
        def __init__(self, parent = None):
            QtGui.QMainWindow.__init__(self, parent)
            self.centralWidget = QtGui.QWidget()
            self.resize(800, 500)
            self.setWindowTitle('Test')
            self.tabs = QTabWidget()
            #self.tabs.connect(self.tabs,SIGNAL("currentChanged(int)"),self,SLOT("onChange(int)")) #tabs,SLOT("tabChangedSlot(int)")
            #self.tabs.currentChanged.connect(self.onChange)


            self.webview = QWebView()
            self.webview.load(QUrl("http://gmx.de"))

            self.webview2 = QWebView()
            self.webview2.load(QUrl("http://web.de"))

            centralLayout = QtGui.QVBoxLayout()
            centralLayout.addWidget(self.tabs, 1)

            self.tabs.addTab(self.webview, "gmx")
            self.tabs.addTab(self.webview2, "web")
            self.centralWidget.setLayout(centralLayout)

            self.setCentralWidget(self.centralWidget)

        #@pyqtSlot()  
        def onChange(self):
            QtGui.QMessageBox.information(self,
                      "Tab Index …
Run Code Online (Sandbox Code Playgroud)

python signals slot qtabwidget

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

我可以在组件的插槽中使用计算属性吗?

最近我发现我不能在组件槽中使用计算属性或数据属性.即使计算在组件中定义,我也无法在组件的插槽中使用它.有没有办法让它运作?

示例代码:

Vue.component('test-component', {
   template: '<div><slot></slot></div>',
   computed: {
      my_computed: function(){
         return 2+3; // not defined in slot
      }
    }
})
<div id="app">
     <test-component>
        <span v-text="my_computed"></span>
     </test-component>
</div>
Run Code Online (Sandbox Code Playgroud)

在这里查看实例, https://jsfiddle.net/gu9jh4n0/1/

slot vue.js computed-properties vuejs2

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

如何在Vue3项目中做命名槽?

在我的 vue 3 脚本设置组件中,我有这个

<template>
    <table>
        <tbody>
            <template v-for="(row, i) in componentProps.rows">
                <tr v-for="(header, j) in componentProps.headers" :key="i + '-' + j" :data-alternating="i%2===0 ? 'even' : 'odd'">
                    <td class="font-weight-bold text-caption">
                        {{ header.title }}
                    </td>
                    <td>
                        <template #test>
                            
                        </template>
                    </td>
                </tr>
            </template>
        </tbody>
    </table>
</template>

<script setup lang='ts'>
const componentProps = defineProps<{
    headers: TableHeader[];
    rows: {[name:string]:any}[];
}>();
</script>
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误

在此输入图像描述

vite 也抱怨这一点

Codegen node is missing for element/if/for node. Apply appropriate transforms first.
4:00:10 PM [vite] Internal server error: Codegen node is …
Run Code Online (Sandbox Code Playgroud)

slot vue.js vuejs3 vite

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

Qt中的SIGNAL&SLOT宏:它们做什么?

我是Qt的初学者,试图了解SIGNALand SLOT宏。当我学习使用该connect方法绑定信号和插槽时,我发现Qt官方参考页上的教程使用:

connect(obj1, SIGNAL(signal(int)), obj2, SLOT(slot()))
Run Code Online (Sandbox Code Playgroud)

但是,这也很好用:

connect(obj1, &Obj1::signal, obj2, &Obj2::slot)
Run Code Online (Sandbox Code Playgroud)

那么究竟是什么做的宏SIGNALSLOT办?它们是否只是在对象所属的类中寻找信号并返回其地址?

那么,为什么大多数程序员为什么不使用这些宏而不是使用它们,&Obj1::signal因为后者看起来更简单,并且如果信号函数的参数发生变化,则无需更改代码?

macros qt signals slot

3
推荐指数
2
解决办法
2345
查看次数

在 v-for 循环 vuejs 中插入命名槽

有谁知道如何在循环中插入命名槽?例如,我有这个代码:儿童

<div v-for="num in nums" :key="num">
    <slot name="foo"></slot>
</div>
Run Code Online (Sandbox Code Playgroud)

而父母是这样的:

<foo-component :nums="nums>
    <template slot="foo">
        <span>Inside the foo component</span>
    </template>
</foo-component>
Run Code Online (Sandbox Code Playgroud)

如果我这样做,控制台将显示此警报:

Duplicate presence of slot "foo" found in the same render tree - this will likely cause render errors.
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?
提前致谢

loops slot vue.js

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

具有多参数的插槽范围

当我尝试在 vue slot 范围内使用两个参数时,我找不到任何关于它的示例。当我使用以下代码实现我的需求时,会报解析错误

<template v-slot:name="text, record">
    <div>{{record.name}}</div>
    <div>{{record.short_name}}</div>
</template>
Run Code Online (Sandbox Code Playgroud)

slot vue.js

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

槽头 vuetify 2.0

早上好,我正在修改 vuetify.js 中数据表的槽头以添加工具提示,所有这些都做得很好,但是 asc 和 desc 的箭头没有显示,我想知道我做错了什么。

<template  v-slot:header="{ props: { headers } }">
    <thead>
        <tr>
            <th 
                style="white-space: nowrap"
                :class="['column sortable', pagination.descending ? 'desc' : 'asc', header.value === pagination.sortBy ? 'active' : '']"
                @click="changeSort(header.value)"
                v-for="element in headers" 
                :key="element.text">
                <v-tooltip top>
                    <template v-slot:activator="{ on }">
                        <span v-on="on">{{element.text}}</span>
                    </template>
                    <span>{{element.text}}</span>
                </v-tooltip>
            </th>
        </tr>
    </thead>
</template>
Run Code Online (Sandbox Code Playgroud)

datatable header slot vue.js vuetify.js

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

[ Vue.js 3 ] 组件中 &lt;textarea&gt; 中 &lt;slot/&gt; 的最佳替代方案

我想创建带有文本区域的组件并在其中传递数据,例如

<c-textarea> hello world </c-textarea>
Run Code Online (Sandbox Code Playgroud)

但经典<slot/>标签在文本区域内不起作用什么是最简单和最干净的替代方案

<template>
   <textarea><slot/></textarea>
</template>
Run Code Online (Sandbox Code Playgroud)

在 Vue.js 3 中

javascript slot vue.js vue-component vuejs3

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