【发布时间】:2014-11-11 13:55:02
【问题描述】:
大家好,我想从非成员函数更新 ui。除了将“this”指针作为我的非成员传递之外的任何帮助都是来自库的回调。
下面是我的代码:
主窗口.cpp
static void callback(QString result)
{
ui->textBrowser->append(result);
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
int a=1,b=2;
QLibrary myLib("myaddlib");
myLib.load();
add = (myadd)myLib.resolve("add_function");
add(callback, a, b);
}
所以我只需要能够从我的非成员回调中将数据附加到 UI。请帮帮我。
编辑:我不允许修改我的回调
根据评论进行编辑:callback 将在不同的线程中调用,因此从那里调用小部件方法会产生错误 'cannot send events to objects owned by a different thread'
【问题讨论】:
-
确保只从 UI (=main) 线程更新 UI。
-
嗨@JohannesS。我同意你的观点,但是对于我想从库回调更新 UI 的情况有什么解决方案?
-
可以修改回调签名吗?对于回调,能够传递一个额外的指针通常会很有帮助(通常是
void*,然后需要适当地转换)。 -
@MiyazawaKenji 好友不能设置为会员。但是我尝试创建全局指针 Ui::MainWindow *myui 并在构造函数中将 myui 分配给 ui 但它引发以下错误:'无法将事件发送到不同线程拥有的对象'。