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的事件機制來實現的.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM