Lv.的博客

Qt 类外调用一个 private slots 函数

MainWindow中 private slots 函数 void print_on_log(QString strtemp);输出一个字符串到编辑窗口中

class MainWindow:publicQMainWindow

{
Q_OBJECT

public:
explicitMainWindow(QWidget*parent=0);
~MainWindow();

privateslots:
voidprint_on_log(QStringstrtemp);

 

定义一个新类Test_one在此类中调用上面的私有槽该类定义为

class Test_one

{
public:
Test_one(QObject*fromMain)
{
this->fromMain=fromMain;
}
voidrun();
private:
QObject*fromMain;
};
voidTest_one::run()
{
QStringstrTemp="类外调用print_on_log函数";
QMetaObject::invokeMethod(fromMain,"print_on_log",Qt::QueuedConnection,Q_ARG(QString,strTemp));

}

接下来就是该如何触发这个类的run函数,当然可以放在任何地方来触发了,本示例为了方便,就在MainWindow调用.

void MainWindow::on_pushButton_clicked()

{

Test_one*test=newTest_one(this);
test->run();

}

这样就实现了在类外调用private slots:函数了.

当然本例的调用方式有些变态.但是还是有在类外调用私有槽函数的可能.

还有一点需要注意:一些程序员认为使用了QMetaObject::invokeMethod()要比发送自定义事件好一些,因为它可以与Qt信号无缝对接,并且不需要创建创建自定义的QEvent子类或者是重新实现事件要发送到的窗口部件中的QWidget::event().实际上,线程之间的信号和槽是通过Qt的事件机制来实现的.

posted @   Avatarx  阅读(3807)  评论(1编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示