zoukankan      html  css  js  c++  java
  • 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的事件机制来实现的.

  • 相关阅读:
    获取全部校园新闻
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    团队总结
    团队第二阶段冲刺绩效评估
    第二阶段冲刺第七天站立会议
    第二阶段冲刺第六天站立会议
    第二阶段冲刺第五天站立会议
    内测版本
    第二阶段冲刺第四天站立会议
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/3760370.html
Copyright © 2011-2022 走看看