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的事件机制来实现的.

Qt 类外调用一个 private slots 函数,布布扣,bubuko.com

时间: 2024-12-21 21:40:49

Qt 类外调用一个 private slots 函数的相关文章

【C++】编写一个简单的类。包含构造函数,成员函数等。

<pre name="code" class="cpp">//编写一个简单的类.包含构造函数,成员函数等. #include <iostream> using namespace std; class Rec { public: Rec(int l,int w); int Area(); void Print(); private: int length,wide; }; Rec::Rec(int l,int w) { length=l; w

Win32下 Qt与Lua交互使用(四):在Lua脚本中自由执行Qt类中的函数

话接上篇.通过前几篇博客,我们实现在Lua脚本中执行Qt类中函数的方法,以及在Lua脚本中连接Qt对象的信号与槽. 但是,我们也能发现,如果希望在Lua脚本中执行Qt类的函数,就必须绑定一个真正实现功能的函数.如QWidget::show(),需要写一个在栈中取出widget指针,widget调用show()函数的方式.如果希望在Lua中调用大量函数,就需要编写大量的C++实现函数.有没有什么省时省力的好方法呢? 上一篇中我们实现了在Lua脚本中连接信号与槽.我们只是传过去了两个QObject的

Functions类,一个Javascript的函数加法类,将两个函数加起来,顺序执行

以下是类的代码: 1 var Functions = { 2 oFunctions: null, 3 add: function (oFunc, oNewFunc) { 4 var oNew = function () { 5 oFunc(); 6 oNewFunc(); 7 }; 8 return oNew; 9 } 10 }; 以下是测试代码: 1 function one() { 2 alert(1); 3 } 4 5 function two() { 6 alert(2); 7 } 8

Qt类声明中Q_OBJECT的作用与报错解决

2017-06-22 周四 大雨 北京 院里 新建作图类,继承自QCUstomPlot类 因为需要同时作8张图,都要单坐标缩放的功能,因此想干脆新建一个类,继承自QCUstomPlot,把需要的功能都加上.类名取为QCUstomPlotPlus,最终成功版类代码如下: //声明.explicit是为了禁止隐式转换. class QCustomPlotPlus : public QCustomPlot { Q_OBJECT //重要! public: explicit QCustomPlotPlu

可重入与线程安全(大多数Qt类是可重入,非线程安全的)

可重入与线程安全 在Qt文档中,术语“可重入”与“线程安全”被用来说明一个函数如何用于多线程程序.假如一个类的任何函数在此类的多个不同的实例上,可以被多个线程同时调用,那么这个类被称为是“可重入”的.假如不同的线程作用在同一个实例上仍可以正常工作,那么称之为“线程安全”的. 大多数c++类天生就是可重入的,因为它们典型地仅仅引用成员数据.任何线程可以在类的一个实例上调用这样的成员函数,只要没有别的线程在同一个实例上调用这个成员函数.举例来讲,下面的Counter 类是可重入的: class Co

Qt类中使用定时器

QT定时器只能使用在进程或线程中. QT类中如果需要定时器,可以把定时工作安排在一个线程中执行. class aaa : public QThread { Q_OBJECT ... protected: //重写run函数 void run(); public slots: void timerOut(); private: QTimer *timer; } aaa::aaa(QThread *parent):QThread(parent) { timer = new QTimer(0); co

【转载】 C++多继承中重写不同基类中相同原型的虚函数

本篇随笔为转载,原文地址:C++多继承中重写不同基类中相同原型的虚函数. 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: virtual void TestA(); }; class CBaseB { public: virtual void TestB(); }; class CDerived : public CBaseA, public CBaseB { public: virtual void TestA()

基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------&gt; 可以返回派生类对象的引用或指针

您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. 百度和网页 http://bbs.csdn.net/topics/380238133 的作者无关,不对其内容负责.百度快照谨为网络故障时之索引,不代表被搜索网站的即时页面. 首页 精选版块 移动开发 iOS Android Qt WP 云计算 IaaS Pass/SaaS 分布式计算/Hadoop J

Qt国际化(Q_DECLARE_TR_FUNCTIONS() 宏给非Qt类添加翻译支持,以前没见过QTextEncoder和QTextDecoder和QLibraryInfo::location()和QEvent::LanguageChange)

Internationalization with Qt 应用程序的国际化就是使得程序能在国际间可用而不仅仅是在本国可用的过程. Relevant Qt Classes andAPIs 以下的类支持Qt的国际化. QTextCodec QTextDecoder QTextEncoder QTranslator QLocale Languages and WritingSystems 有时,国际化是比较简单的,例如,把美国的应用程序让澳大利亚或英国的用户可访问,只需要简单的改变拼写.但是,把美国的